448 votes

Le nom 'InitializeComponent' n'existe pas dans le contexte actuel.

Si je crée un nouveau projet dans Visual Studio 2010 SP1 et que je sélectionne "WPF Application" et que j'essaie de construire l'application générée, j'obtiens l'erreur suivante

Le nom 'InitializeComponent' n'existe pas dans le contexte actuel.

J'ai obtenu une erreur similaire ce matin lorsque j'ai essayé de construire mon projet actuel. Hier, je n'ai eu aucun problème pour le compiler et l'exécuter.

J'ai créé un nouveau projet et j'ai obtenu l'erreur à chaque fois que j'ai compilé le projet. Je viens d'envoyer le projet à un collègue, et il a compilé sans aucune erreur.

Qu'est-ce qui ne va pas ?

5 votes

Cette "erreur" de l'utilisateur semble facile à résoudre, juste une simple définition correcte de x:Class. Jusqu'à là tout est ok, le développeur devrait faire plus attention, mais que faire si ce n'est pas cette erreur mais une erreur fantôme avec le même message d'erreur ? J'ai lu BEAUCOUP de solutions voodoo différentes depuis 2012. Il serait utile pour VS d'avoir un message d'erreur plus clair et bien sûr un bugfix pour les erreurs fantômes avec le même message. Les développeurs sont depuis 2012 en train de changer la configuration de construction à partir des fichiers, des projets, en copiant-collant le projet, en supprimant les fichiers du dossier App, en redémarrant VS, etc. Bravo MS... un bug de 4 ans et qui continue de vieillir !

2 votes

Pour tous les futurs lecteurs de cette question : Ce problème semble avoir de nombreuses sources possibles. Dans mon cas, les premières réponses n'ont pas aidé, mais une des réponses plus bas était correcte.

0 votes

@MOnsDaR L'espace de nom du fichier Designer était le problème pour moi.

845voto

Sean B Points 2086

J'ai rencontré ce problème à plusieurs reprises et j'oublie toujours ce qui le provoque. J'ai rencontré ce problème lorsque j'ai renommé l'espace de nom dans mon fichier de code mais pas dans mon XAML.

Vérifiez donc si vous avez fait de même.

Le site espace de noms et classe Les noms doivent correspondre puisqu'ils font tous deux partie d'une classe partielle.

namespace ZZZ
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow
    {
         //...
    }
}

<!-- XAML -->
<Window x:Class="ZZZ.MainWindow">

12 votes

Merci Sean. Je suis venu ici pour poster cette réponse mais vous m'avez déjà devancé. C'est exactement ce qui s'était passé et cela a résolu mon problème. Votre commentaire devrait être plus haut dans le hit-parade car il m'aurait fait gagner 15 minutes.

2 votes

Si les noms des classes ne sont pas les mêmes, vous obtiendrez la même erreur.

2 votes

Voici la réponse. Je ne sais pas pourquoi elle n'a pas été choisie, mais c'est elle et j'ai rencontré ce problème en codant des Xamarin.Forms.

273voto

Segfault Points 3311

L'action de construction pour le fichier .xaml doit également être définie sur "Page", lorsque vous déplacez un fichier xaml entre les projets, ce paramètre est perdu (dans VS 2010 au moins).

11 votes

C'était ce qui m'arrivait. Merci !

3 votes

Après un copier-coller, il arrive que l'action de construction du xaml change de page à contenu.

0 votes

J'aurais aimé trouver cette réponse hier - j'ai perdu environ 6 heures à cause de cela !

27voto

Shailender Singh Points 320

Il y a une raison très spécifique à cela, et elle se trouve dans les paramètres du projet. Cela se produit généralement lorsque vous essayez d'ajouter un contrôle ou une fenêtre WPF à une bibliothèque de classes ou à un projet .NET 2.0. La raison de cette erreur est que le projet ne sait pas qu'il construit un contrôle ou une fenêtre WPF et essaie donc de le construire comme un projet C# 2.0.

La solution consiste à modifier le fichier .csproj. Faites un clic droit sur le projet à l'origine du problème et sélectionnez "Décharger le projet". Faites un clic droit sur le projet déchargé et sélectionnez "Edit .csproj". Le fichier .csproj s'ouvre et vous pouvez voir le XML. Recherchez la ligne suivante :

<Import Project=…..

C'est vers la fin du fichier, et la seule ligne que vous avez est probablement

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />

Cela indique à Visual Studio de construire le projet comme un projet .NET 2.0. Ce que nous voulons faire, c'est dire à Visual Studio qu'il s'agit en fait d'un projet WPF, nous devons donc ajouter la ligne suivante :

<Import Project="$(MSBuildBinPath)\Microsoft.WinFX.targets" />

Cette ligne indiquera à Visual Studio de construire le projet comme un projet WPF. Maintenant, le fond de votre fichier .csproj devrait ressembler à ceci :

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildBinPath)\Microsoft.WinFX.targets" />

Sauvegardez le fichier .csproj, cliquez avec le bouton droit de la souris dans l'explorateur de solutions et sélectionnez "Recharger le projet", compilez et c'est tout, vous avez terminé !

1 votes

J'ai essayé avant d'écrire cette question et ça ne sert à rien. Je pense que c'est un peu bizarre que je ne puisse pas compiler un nouveau projet mais que mon collègue le puisse...

1 votes

J'ai essayé aussi et ça n'a pas aidé. L'ajout de la nouvelle importation a donné lieu à un nouvel avertissement (voir ci-dessous) mais l'erreur initiale est toujours là." C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microso ft.WinFX.targets" ne peut pas être importé à nouveau. Il a déjà été importé à " C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microsoft.NET Framework.targets (76,3)". Il s'agit très probablement d'une erreur de création de build. Cette importation ultérieure sera ignorée. "

0 votes

Merci, cela a réglé le problème pour moi, sur un projet dont j'ai hérité.

22voto

p3d3str1an Points 51

Cela m'est arrivé lorsque j'ai accidentellement supprimé la référence de la classe dans la définition du xaml :

J'ai remplacé le

<Window x:Class="myapp.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

première ligne avec ceci :

<RibbonWindow 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

Je sais que ce n'est pas la réponse à la question originale (parce que ce projet est construit sur une autre machine), mais le message d'erreur était le même, donc peut-être que je vais aider quelqu'un dans cette situation.

0 votes

Ce n'était pas exactement mon problème mais ça m'a aidé à le localiser. J'avais l'espace de nom sans le nom de la classe ensuite.

0 votes

Ceci m'a aidé à trouver mon problème, dans mon cas, il manquait la ligne x:Class, ajouter ceci a réglé le problème pour moi.

16voto

Song Points 71

Assurez-vous que dans le fichier xaml

<Page x:Class="Project1.Page1" ...

faire correspondre le nom "Project1" et le nom "Page1".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X