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 je tente de construire l'application générée, j'obtiens l'erreur
le nom "InitializeComponent" n'existe pas dans le contexte actuel.
j'ai eu une erreur similaire, ce matin, quand j'ai essayé de construire mon projet en cours. Hier, je n'ai eu aucun problème pour le compiler et le lancer.
j'ai créé un nouveau projet et obtenu l'erreur à chaque fois que j'ai compilé le projet. Je viens d'envoyer le projet à un collègue, qui vient de le compiler sans aucune erreur.
Qu'est-ce qui ne va pas?
30 réponses
j'ai rencontré ceci quelques fois et je continue à oublier ce qui en est la cause. Je suis tombé sur cela quand j'ai renommé l'espace de noms sur mon code derrière le fichier mais pas dans mon XAML.
vérifiez si vous avez fait la même chose.
Le espace de noms et classe noms doivent correspondre puisqu'ils sont 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">
de L'Action de Construire pour la .le fichier xaml doit aussi être défini à "Page", lors du déplacement d'un fichier xaml entre les projets ce paramètre se perd (dans VS 2010 au moins).
pour ceux qui (dans VS2015) n'ont pas d'erreurs en mode de débogage, mais do ont l'erreur spécifiée en mode de publication( et pourtant le projet fonctionne bien), voici quelque chose de simple à essayer:
- ouvrir le fichier XAML correspondant au XAML incriminé.cs fichier.
- Faire un edit--tout modifier, comme par exemple, ajouter un espace quelque part
- Enregistrer le fichier et le fermer
cette méthode a travaillé pour moi.
cela m'est arrivé quand j'ai accidentellement supprimé la référence de classe de la définition 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 initiale (parce que ce projet s'appuie sur une autre machine), mais le message d'erreur était le même, donc peut-être que je vais aider quelqu'un avec cette situation.
- Accédez à la solution répertoire
- supprimer le dossier \obj
- reconstruire la solution
j'ai rencontré cette erreur lors du remaniement où j'ai renommé certains fichiers/dossiers et le prexisiting *.G. les fichiers cs devaient être générés de nouveau.
il y a une raison très spécifique à cela, et c'est dans le cadre du projet. Cela se produit généralement lorsque vous essayez d'ajouter un contrôle/fenêtre WPF à une bibliothèque ou à un projet de classe .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 tente donc de le construire comme un projet C# 2.0.
la solution consiste à éditer le .fichier csproj. Clic droit sur le projet à l'origine du problème et sélectionnez "Ejecter Projet". Cliquez avec le bouton droit de la souris sur le projet non chargé et sélectionnez "Modifier .csproj". Le. le fichier csproj s'ouvrira et vous pourrez voir le XML. cherchez la ligne suivante:
<Import Project=…..
C'est près de 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 du FPF, donc nous devons ajouter la ligne suivante::
<Import Project="$(MSBuildBinPath)\Microsoft.WinFX.targets" />
Cette ligne va indiquer à Visual Studio pour créer le projet comme un projet WPF. Maintenant, votre .le bas du fichier csproj doit ressembler à ceci:
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildBinPath)\Microsoft.WinFX.targets" />
Enregistrer la .fichier csproj, cliquez avec le bouton droit de la souris dans Solution Explorer et sélectionnez" Reload Project " compiler et c'est tout, vous avez terminé!
assurez-vous que dans le fichier xaml
<Page x:Class="Project1.Page1" ...
correspondent au nom "Project1" et au nom "Page1
j'ai rencontré ceci en renommant un usercontrol. La façon dont je l'ai corrigé était de commenter InitializeComponent, vérifier que tous les noms étaient corrects (xaml et le code derrière), construire le projet, uncement InitializeComponent, puis construire à nouveau. Il semble qu'il puisse y avoir quelques causes/solutions pour cette question, mais de cette façon fait pour moi.
vous pourriez obtenir cette erreur lorsque vous importez une classe à partir d'un autre projet, ou que vous changez le chemin du fichier xaml, ou l'espace de noms de xaml ou de behind .cs fichier.
: qu'Il pourrait avoir un espace de noms n'est pas la même chose que ce que vous avez en vous un nouveau projet
namespace TrainerB.MVC.Forms
{
public partial class AboutDeveloper : ContentPage
{
public AboutDeveloper()
{
InitializeComponent();
}
}
}
comme vous pouvez le voir l'espace de nom dans le fichier importé commence par l'ancien nom du projet: "TrainerB " , mais votre nouveau le projet peut avoir un nom différent, donc, de passer à la correcte du nouveau nom du projet, dans les deux .fichier xaml et le derrière .cs fichier.
deux:
modifier les propriétés de la .fichier xaml:
Construire L'Action: Ressource Incorporée
Outil Personnalisé: MSBuild: UpdateDesignTimeXaml
j'ai eu cela (bien que ce soit de ma faute et qu'il ait été laissé après que j'ai copié et collé du code); il peut se produire lorsque l'espace de nom ne correspond pas entre le XAML et le code derrière
EG
<UserControl x:Class="DockPanel.TreeView" />
et le code derrière est
namespace NotThePanelItShouldBe
aucune des réponses ci-dessus n'a fonctionné pour moi. J'ai tout essayé sauf le double. Cependant, pour une raison étrange, cela a fonctionné dans mon projet multiplateforme dans Visual Studio 2015:
- faites un clic droit sur le projet à l'origine du problème dans L'Explorateur de solutions. Dans le menu pop-up choisir: Ajouter -- > Classe
- sélectionner multiplate-forme --> formulaires Page Xaml. Gardez la jolie page 1.cs nom de la norme et cliquez sur Ajouter.
- remarquez comment le précédent problème InitializeComponent () vient de disparaître pour une raison ou une autre.
- supprimer la page nouvellement créée 1.cs et continuer la programmation comme si Visual Studio fonctionnait très bien.
je suis d'accord avec la réponse ci-dessus que les espaces de noms doivent correspondre. Cependant, j'ai eu un problème comme celui-ci où les espaces de noms correspondaient.
pour corriger, j'ai simplement changé l'espace de nom dans le XAML en un faux, sauvé, puis je l'ai changé de nouveau pour le bon. Voila!
déchargez la solution entière et rechargez-la à nouveau. Puis reconstruire la solution. Cette résolu le problème pour moi.
une autre cause commune de cette erreur est si vous avez fait quelque chose dans ce:
-
clic droit sur le dossier du projet pour créer un nouveau UserControl. Cela crée un fichier de classe et xaml qui dérive du contrôle de l'utilisateur dans l'espace de noms du dossier.
-
alors vous décidez de changer l'espace de nom de la classe parce que vous êtes vraiment juste en utilisant des dossiers pour l'organisation du code. L'attribut x: Class ne sera pas obtenir automatiquement mis à jour de sorte qu'il sera à la recherche pour une classe qui n'existe pas. Pourrait probablement utiliser un meilleur message d'erreur comme " x: Class type ne pouvait pas être trouvé dans l'espace de nom bla.l'alpage blaa.blaaa."
j'essaie toutes les suggestions ci-dessus. Si vous essayez trop sans succès obtenir le moyen plus facile. créez une nouvelle page.XAML puis copiez votre code pour la nouvelle classe et supprimer classe XAML avec des problèmes. Ne pas passer plus de temps.
si vous utilisez des formulaires Xamarin et que vous déplacez un fichier XAML, l '"action de compilation" du fichier est modifiée. Les formulaires Xamarin nécessitent "build action = Embedded Resource".
Appliquer "action de génération" dans Visual Studio:
Select the XAML file -> Properties -> Build Action = Embedded Resource
cela m'est arrivé parce qu'un désinstallateur de paquet Nuget a supprimé tous les attributs de l'élément
j'ai corrigé le problème en inversant App.xaml à la copie contrôlée par la source.
ça m'a résolu le problème.
, j'avais commenté les ressources de l'Application.fichier xaml
<Application x:Class="MyApp.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Application.Resources>
<!--<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary
Source="/PresentationFramework.Aero, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, ProcessorArchitecture=MSIL;component/themes/aero.normalcolor.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>-->
</Application.Resources>
</Application>
commente la correction de l'erreur de construction.
<Application x:Class="MyApp.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary
Source="/PresentationFramework.Aero, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, ProcessorArchitecture=MSIL;component/themes/aero.normalcolor.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
en creusant un peu plus, j'ai trouvé que l'application.G. le fichier cs dans {Project}\obj\debug ne contenait ce qui suit que lorsque j'ai quitté la ressource commentée dans.
/// <summary>
/// InitializeComponent
/// </summary>
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
public void InitializeComponent() {
if (_contentLoaded) {
return;
}
_contentLoaded = true;
System.Uri resourceLocater = new System.Uri("/MyApp;component/app.xaml", System.UriKind.Relative);
#line 1 "..\..\..\App.xaml"
System.Windows.Application.LoadComponent(this, resourceLocater);
#line default
#line hidden
}
une autre solution à ce problème est de simplement changer la propriété-> construire L'Action sur le XAML à partir de la ressource embarquée à n'importe quoi d'autre, enregistrer, puis la modifier à nouveau à la ressource embarquée. L'erreur disparaît.
si les espaces de noms sont CORRECTS, alors il y a une même erreur,
fermez simplement votre application et ouvrez-la à nouveau .
Cela peut résoudre votre problème
après quelque action l'espace de noms de la .le fichier cs et celui qui est dedans .le fichier xaml peut être différent (dans xaml, cherchez l'espace de noms x:Class=".yourType").
fixez - les pour qu'ils soient identiques.
j'ai découvert que l '"objet de démarrage" était (non défini) causant cette erreur pour moi.
comme ceci semble être le fil conducteur pour le problème concernant le manque de 'InitializeComponent', je vais inclure ma réponse ici.
moi aussi j'avais ce problème et j'ai essayé tout ce que j'ai trouvé ici et dans tous les autres Forums que Google pourrait trouver, cependant aucun n'a résolu le problème pour moi. Après deux heures à tout essayer, j'ai finalement compris ce qui n'allait pas avec ma configuration .
dans notre projet, nous utilisons Métro composants de MahApps . La vue qui me causait des problèmes était une vue héritant de MetroWindow, comme ceci:
<Controls:MetroWindow x:Class="ProjectNamespace.MyView"
xmlns:Controls="http://metro.mahapps.com/winfx/xaml/controls"
... >
Maintenant, j'ai défini mes ressources statiques
<Controls:MetroWindow.Resources>
<prop:Resources x:Key="LocalizedStrings"/>
...
</Controls:MetroWindow.Resources>
C'est comme ça que j'ai défini les ressources dans UserControl
dans tous mes autres points de vue, donc c'est ce que j'ai supposé que ça va marcher.
ce n'était cependant pas le cas avec Controls:MetroWindow
! Là, j'ai absolument besoin de l' la définition de la ressource est la suivante:
<Controls:MetroWindow.Resources>
<ResourceDictionary>
<prop:Resources x:Key="LocalizedStrings"/>
...
</ResourceDictionary>
</Controls:MetroWindow.Resources>
donc mon problème, en résumé, était une étiquette manquante <ResourceDictionary>
. Je ne sais vraiment pas pourquoi cela a produit l'erreur 'InitializeComponent' et il est bizarre qu'il ne l'ait même pas produit sur toutes mes machines, mais c'est comme ça que je l'ai corrigé. Espérons que cela aide (les 0,001% restants des personnes rencontrant ce problème).
j'ai eu le même problème, j'espère que j'ai copié mon MainWindow xaml et cs dans un nouveau fichier et puis je les ai copiés à leur place d'origine. J'ai alors eu cette erreur après avoir essayé de compiler l'application WPF.
ce que j'ai fait pour corriger cette erreur a été de renommer l'espace de noms (de egNamespace -> egNamespaceNew, et cela a fonctionné à nouveau. J'ai ensuite changé l'espace de noms à celui d'origine.
clic droit sur le dossier dans le projet pour créer un nouveau UserControl qui était le problème pour moi. J'ai créé le même contrôle à l'extérieur du dossier et c'est tout.
j'ai juste rencontré ce problème, et il s'est avéré que mon projet est stocké dans mon dossier utilisateur, qui est stocké sur le réseau, et nous avons eu un moment de panne de réseau. J'ai fait une compilation; il s'est plaint que mes fichiers avaient été modifiés à l'extérieur de l'éditeur (ils ne l'avaient pas fait; les serrures des fichiers viennent d'être bornées), et il s'est bien construit, supprimant l'erreur concernant la méthode InitializeComponent()
.
BTW, au cas où vous vous demandez, développer quelque chose à partir d'un lecteur réseau est mauvais pratique. Cela devient particulièrement problématique lorsque vous essayez de tirer parti du code géré de .NET; d'après mon expérience, il panique à chaque fois que vous construisez. J'ai oublié de mettre ce petit contre-projet dans le bon dossier, et a fini par payer le prix.
pour ceux qui trouvent cela sur internet. Vérifiez le Windows.csproj fichier si la compilation est là. Il devrait y avoir 2 entrées
<Page Include="YourFile.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Compile Include="YourFile.xaml.cs">
<DependentUpon>YourFile.xaml</DependentUpon>
</Compile>
une autre explication possible est que vous construisez contre x86. Cliquez avec le bouton droit de la souris sur votre Solution et choisissez Gestionnaire de Configuration. Voyez si vous construisez contre x86 au lieu de N'importe quel CPU.
donc je me rends compte que c'est une question plus ancienne, mais nous avions un problème similaire. Nous avons pu construire un projet en utilisant VS2012, mais pas msbuild à partir de la ligne de commande. Je suis allé dans le .proj file et remarqué qu'il n'avait pas d'enregistrement pour "ProjectTypeGuids" sous la section par défaut "PropertyGroup", donc j'ai ajouté ceci:
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
qui est le guide de projet pour WPF. J'ai ensuite supprimé et rajouté le UserControl et il a commencé à fonctionner. Je ne suis pas sûr si je devais fais ce dernier pas, mais ça marche pour moi maintenant.
à cause d'une raison quelconque après la copie .xaml et il est .cs entre les projets l'action build change parfois. Assurez-construire l'action de votre .xaml est Page.