C# / WPF: InitializeComponent existiert nicht im aktuellen Kontext

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

Screenshot von der Fehlermeldung, dass der Name InitializeComponent nicht existiert im akuellen Kontext.
Error/Warnung CS0103 für InitializeComponent

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.

Screenshot der Seiteneigenschaften von der XAML-Datei vor der Behebung des Fehlers
Seiteneigenschaften der XAML-Datei mit Fehlermeldung

Ich habe die Eigenschaft “Copy to Output Directory” auf “Do not copy” gesetzt und als Custom Tool habe ich den XamlIntelliSenseFileGenerator eingetragen.

Screenshot der Page Properties von der XAML-Datei ohne der Fehlermeldung für InitializeComponent
Seiteneigenschaften der XAML-Datei ohne Fehlermeldung

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.

2 Kommentare

  1. 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.

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert