Ein Problem was mich gut und gern ein paar Stunden gekostet hat in Visual Studio beim Programmieren einer WPF-Anwendung mit C# ist, dass die Methode InitializeComponent() im Konstruktur des CodeBehinds vom MainWindows oder aber auch in anderen Dialogen eine Fehlermeldung gebracht hat.
Error bei InitializeComponent()
Es handelt sich dabei um folgende Fehlermeldung:
Der Name ‚InitializeComponent‘ existiert nicht im aktuellen Kontext
oder typischerweise als englische Fehlermeldung:
CS0103: The name ‚InitializeComponent‘ does not exist in the current context
Trotz dieser Fehlermeldung war die Anwendung kompilierbar, zeigte aber ein seltsames Verhalten. U.a. beim Programmieren wurden im CodeBehind neu eingefügte UserControls nicht mehr erkannt.
Recherchiert man im Internet, stößt man auf viele Forenbeiträge, dass dieser Fehler bereits andere Programmierer viele Stunden gekostet hat und bis hin zur Verzweiflung gebracht hat.
Lösung
Man kann ebenfalls lesen, dass es mehrere vielfältige Ursachen für das Problem geben kann. Ein Grund kann sein, dass der Namespace im CodeBehind nicht mit dem eingebundenen Namespace in der XAML-Datei übereinstimmt. Die müssen also gleich sein:
Beispiel:
CodeBehind: namespace MyNamespace{}
XAML: x:Class=“MyNamespace.MainWindow“
Das konnte ich in meinem Fall ausschließen.
Eine andere Möglichkeit zum Ausprobieren ist, den obj – Ordner in der Solution zu löschen und Visual Studio einmal zu schließen und neu zu starten. Danach ein Rebuild der Solution machen. Aber auch das hat in meinem Fall nicht geholfen.
Bei mir lag anscheinend das Problem in den Build-Einstellungen für die XAML-Datei. Bei Custom Tool stand „MSBuild:Compile“ drin.
Ich habe die Eigenschaft „Copy to Output Directory“ auf „Do not copy“ gesetzt und als Custom Tool habe ich den XamlIntelliSenseFileGenerator eingetragen.
Auf mehr oder weniger magische Weise funktioniert es so und die oben genannte Fehlermeldung zu InitializeComponent verschwindet. Eine wirkliche gesicherte Ursachenerklärung habe ich dafür nicht. Aber ich denke, dass MSBuild ggf. nicht so richtig geeignet ist zum Kompilieren von XAML-Dateien oder nicht unterscheiden kann so richtig zwischen WindowsForms und XAML-Dateien. Deswegen also besser einen XAML-Compiler direkt verwenden.
Es ist armselig, dass Microsoft dieses Problem seit Jahren nicht beseitigt hat.
Dieses nervige Problem hat mich (wie sicher tausende andere Entwickler) in der Vergangenheit auch schon unzählige Stunden gekostet.
Vielen Dank für Deinen Tipp.
Funktioniert bislang bei mir auch prima.
Leider taucht der Fehler seit einigen Tagen wieder auf.
Microsoft Visual Studio Community 2022 (64-bit)
Version 17.10.2