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

383

Si je crée un nouveau projet dans Visual Studio 2010 SP1 et sélectionne "Application WPF" et essaie de créer 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 lorsque j'ai essayé de construire mon projet actuel. Hier, je n'ai eu aucun problème à 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 vient de le compiler sans aucune erreur.

Qu'est-ce qui ne va pas?

user876402
la source
3
Cette "erreur" utilisateur semble facile à résoudre, juste une simple définition correcte de x: Class. Jusqu'à ce que tout soit ok, le développeur devrait prêter plus d'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 de contournement vaudou différentes de 2012. Cela aiderait de VS un message d'erreur très clair et bien sûr un correctif pour les erreurs fantômes avec le même message. Les développeurs modifient depuis 2012 la configuration de construction des fichiers, des projets, copient-collent le projet, suppriment les fichiers du dossier App, redémarrent VS, etc. Bravo MS ... un bug de 4 ans et toujours plus vieux!
juagicre
2
Pour tous les futurs lecteurs de cette question: Ce problème semble avoir beaucoup de sources possibles. Dans mon cas, les premières réponses n'ont pas aidé, mais l'une des réponses plus bas était correcte.
MOnsDaR
@MOnsDaR L'espace de noms du fichier Designer était le problème pour moi.
Ctrl S
Bien que cela puisse être causé par de nombreuses choses (espace de noms renommé \ type de page - MSBuild), j'ai finalement trouvé la solution pour ce qui le causait sur le projet dont j'ai hérité. Dans les fichiers .csproj, j'ai dû changer la "ToolsVersion" de 4 à 15 (VS 2017).
MrMikeJJ

Réponses:

737

Je l'ai rencontré plusieurs fois et j'oublie toujours ce qui en est la cause. Je suis tombé sur cela lorsque j'ai renommé l'espace de noms sur mon code derrière le fichier mais pas dans mon XAML.

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

L' espace de noms et les noms de classe doivent correspondre car 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">
Sean B
la source
10
Merci Sean. Je suis venu ici pour poster cette réponse ici, mais vous m'avez déjà battu. C'est exactement ce qui s'était passé et cela a résolu mon problème. Votre commentaire devrait être plus haut dans les classements car cela m'aurait fait gagner 15 minutes.
Magnum
2
Si les noms de classe ne sont pas les mêmes, vous obtiendrez la même erreur
reggaeguitar
2
Telle est la réponse. Je ne sais pas pourquoi il n'a pas été choisi, mais c'est tout et j'ai rencontré ce codage de Xamarin.Forms.
Marcus Shockley
1
Lors de la refactorisation, assurez-vous d'inclure des commentaires et des chaînes (Visual Studio 2015)
Gabriel GM
3
Pour moi (dans Xamarain.Forms) utilisant un projet "Quick Start" téléchargé depuis Azure, c'était l'espace blanc / retrait entre xmlns: x = " schemas.microsoft.com/winfx/2009/xaml " et x: Class qui était le problème. Je l'ai supprimé et retapé et cela a fonctionné!
James
241

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

Segfault
la source
11
C'était ce qui m'arrivait. Merci!
Ignacio Soler Garcia
3
Après un copier-coller, il arrive que l'action de construction xaml passe de la page au contenu
Roberto
4
Se produit toujours dans Visual Studio 2012 (mise à jour 2)
gumo
8
Se produit toujours dans Visual Studio 2013
Chris Ray
7
Sérieusement ... pourquoi Microsoft, pourquoi? Me détestes-tu / nous?
qwertoyo
106

Pour ceux qui n'ont pas d'erreurs en mode Debug, mais qui ont l'erreur spécifiée en mode Release (et pourtant le projet fonctionne bien), voici quelque chose de simple à essayer:

  1. Ouvrez le fichier XAML correspondant au fichier xaml.cs incriminé.
  2. Faire une modification - toute modification, comme ajouter un espace quelque part
  3. Enregistrez le fichier et fermez-le

Cette méthode a fonctionné pour moi dans VS 2015, et selon d'autres utilisateurs, également 2017 et 2019

BCA
la source
3
Tu es mon héros aujourd'hui. Merci
Peter pete
14
Assez fou, cela a fonctionné pour moi avec VS2015. Et il a corrigé toutes les erreurs dans tous les fichiers XAML. C'est vraiment un moment WTF.
William Denman
5
Dang, je viens de me brûler à nouveau avec celui-ci. Heureusement, j'ai trouvé la même réponse que j'ai déjà voté et commenté. Je devrais vraiment, mais ceci comme une note post-it sur mon moniteur.
William Denman
3
Même chose dans VS2017 et cela l'a corrigé.
Hans
2
Fonctionne toujours dans VS2019 ...
soulflyman
29
  1. Accédez au répertoire de la solution
  2. Supprimez le dossier \ obj
  3. Reconstruisez la solution

J'ai rencontré cette erreur lors de la refactorisation où j'ai renommé certains fichiers / dossiers et les fichiers prexisiting * .g.cs devaient être régénérés.

JordanBean
la source
On dirait que j'ai le même problème, mais cela n'a pas fonctionné pour moi.
LuckyLikey
Faites-le après avoir vérifié que votre xaml x:Classcorrespond au Namespace.Class.
Jake
tnx. cette simple astuce l'a fait pour moi.
gil adino
26

Il y a une raison très spécifique à cela, et c'est dans les paramètres du projet. Cela se produit généralement chaque fois que 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 essaie donc de le créer en tant que 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». Cliquez avec le bouton droit sur le projet déchargé et sélectionnez «Modifier .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 générer le projet en tant que projet .NET 2.0. Ce que nous voulons faire est de 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 indique à Visual Studio de générer le projet en tant que projet WPF. Le bas de votre fichier .csproj devrait maintenant ressembler à ceci:

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

Enregistrez le fichier .csproj, faites un clic droit dessus dans l'Explorateur de solutions et sélectionnez «Recharger le projet» compiler et c'est tout, vous avez terminé!

Shailender Singh
la source
1
J'ai essayé avant d'écrire cette question et cela n'aide pas. Je pense que c'est un peu bizarre que je ne puisse pas compiler de nouveau projet mais mon collègue peut ...
user876402
1
J'ai aussi essayé et ça n'a pas aidé. L'ajout de la nouvelle importation a généré un nouvel avertissement (voir ci-dessous) mais l'erreur d'origine est toujours là. "C: \ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.WinFX.targets" ne peut pas être importé à nouveau. Il était déjà importé dans "C: \ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.NETFramework.targets (76,3)". Il s'agit très probablement d'une erreur de création de build. Cette importation ultérieure sera ignorée. "
user316117
Je viens aussi de l'essayer et ça n'a pas marché ...?
Sizons
Merci, cela l'a corrigé pour moi, sur un projet dont j'ai hérité.
MrMikeJJ
22

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 d'origine (parce que ce projet s'appuie sur une autre machine), mais le message d'erreur était le même, alors je vais peut-être aider quelqu'un dans cette situation.

p3d3str1an
la source
ce n'était pas exactement mon problème mais cela m'a aidé à le localiser. J'ai eu l'espace de noms sans le nom de la classe par la suite
Rivenfall
Cela a fonctionné pour moi. merci
Sinaesthetic
Cela m'a aidé à trouver ma question, dans mon cas , je manquais x: ligne de classe, en ajoutant ceci en fixe pour moi
apc
18

Vous pouvez obtenir cette erreur lorsque vous importez une classe à partir d'un autre projet ou modifiez le chemin d'accès du fichier xaml ou l'espace de noms du fichier xaml ou derrière .cs.

Un: il peut avoir un espace de noms différent de celui que vous avez dans votre 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 projet peut avoir un nom différent, il vous suffit donc de le remplacer par le nouveau nom de projet correct, dans le fichier .xaml et le fichier .cs derrière.

Deux:

changez les propriétés du fichier .xaml en:

Créer une action: ressource intégrée

Outil personnalisé: MSBuild: UpdateDesignTimeXaml

Propriétés du fichier Xaml

Correction de l'espace de noms Xaml 01

Correction de l'espace de noms Xaml 02

Reader Man San
la source
OMG! merci vraiment pour cette solution. J'ai testé chaque solution trouvée et rien ne fonctionnait. L'astuce réside dans les propriétés du xamlfichier. +1
IgniteCoders
16

Assurez-vous que dans le fichier xaml

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

faire correspondre le nom «Project1» et le nom «Page1»

Chanson
la source
Cela a résolu mon problème.
octavian
16

Vérifiez le fichier Designer .

J'ai eu ce même problème. Dans mon cas, la cause était que le namespacefor FileName.Designer.cs ne correspondait pas au (correct) namespaceutilisé dans FileName.cs .

La modification namespacede FileName.Designer.cs pour correspondre à celle de FileName.cs a résolu le problème immédiatement.

Ctrl S
la source
14

J'ai eu cela (bien que ce soit ma faute et que cela ait été causé après avoir copié et collé du code); cela peut se produire lorsque l'espace de noms ne correspond pas entre le XAML et le code derrière

PAR EXEMPLE

<UserControl x:Class="DockPanel.TreeView" />

et le code derrière est

namespace NotDockPanel
Dave
la source
Cela m'a amené à découvrir que mon Designer avait un espace de noms incorrect. Merci!
Ctrl S
13

J'ai rencontré cela en renommant un utilisateur. La façon dont je l'ai corrigé était de commenter InitializeComponent, de vérifier que tous les noms étaient corrects (xaml et code derrière), de générer le projet, de décommenter InitializeComponent, puis de recréer. Il semble qu'il y ait peut-être quelques causes / solutions à ce problème, mais c'est ainsi que cela s'est passé pour moi.

Morgan Herlocker
la source
1
Je n'ai rien renommé? Cependant, cette solution a fonctionné pour moi. Les fichiers * .g.cs et * .gics étaient manquants dans le dossier obj, le commentant et la génération du projet a généré les fichiers manquants. Je ne sais pas comment il est entré dans cet état.
finlaybob
11

Aucune des réponses ci-dessus n'a fonctionné pour moi. Je les ai tous essayés sauf les doublons. Cependant, pour une raison étrange, cela a fonctionné dans mon projet multiplateforme dans Visual Studio 2015:

  1. Cliquez avec le bouton droit sur le projet à l'origine du problème dans l'Explorateur de solutions. Dans le menu contextuel, choisissez: Ajouter -> Classe
  2. Sélectionnez multiplateforme -> Page Forms Xaml. Conservez le joli nom standard de Page1.cs et cliquez sur Ajouter.
  3. Remarquez comment le problème InitializeComponent () précédent a disparu pour une raison quelconque.
  4. Supprimez le Page1.cs nouvellement créé et poursuivez la programmation comme si Visual Studio fonctionnait très bien.
Anders
la source
Celui-ci a fonctionné pour moi. J'avais fait un copier-coller et renommé un contrôle utilisateur que j'avais, lorsque le InitializeComponent () a commencé à échouer.
Rafael Ventura
Comment diable avez-vous rencontré ce correctif? J'ai essayé tout le reste et cela a fonctionné. En utilisant VS 2017, le problème est donc actuel.
blearyeye
Génial, cela fonctionne pour moi. Merci beaucoup
IZI
9

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 résoudre ce problème, j'ai simplement changé l'espace de noms dans le XAML en un INCORRECT, enregistré, puis changé à nouveau en celui de CORRECT. Voila!

hauteurs1976
la source
J'aurais ajouté ceci en tant que commentaire à la bonne réponse, mais je n'ai pas le représentant pour le faire :(
heights1976
Merci pour cela! A travaillé pour moi après être devenu fou en essayant toutes sortes de choses. Ma solution a été construite à l'origine sans aucune erreur, puis après que le PC s'est endormi pendant un certain temps, il a essayé à nouveau et obtenait l'erreur. Peut-être quelque chose à voir avec le mode veille?
JeremyB
J'avais le même problème et la même solution. Je crois que cela avait quelque chose à voir avec IntelliSense. La modification de l'espace de noms dans le xaml a probablement déclenché une mise à jour des parties pertinentes dans la base de données IntelliSense. Ce n'est qu'une supposition cependant.
FishySwede
8

Si vous utilisez Xamarin Forms et que vous déplacez un fichier XAML, "l'action de génération" du fichier est modifiée. Xamarin Forms nécessite "build action = Embedded Resource".

Appliquer une "action de génération" dans Visual Studio:

Select the XAML file -> Properties -> Build Action = Embedded Resource

Tonatio
la source
Hourra pour vous monsieur / madame!
naspinski
7

J'essaie toutes les suggestions ci-dessus. Si vous essayez trop sans succès, obtenez le moyen le plus simple. Créez un nouveau page.xaml puis copiez votre code pour la nouvelle classe et supprimez la classe XAML avec des problèmes. Ne passez pas plus de temps.

Diego Venâncio
la source
7

Déchargez la solution entière, puis rechargez-la à nouveau. Reconstruisez ensuite la solution. Cela a résolu le problème pour moi.

Eldhose
la source
Merci a fonctionné pour moi!
Izion
6

Une autre cause courante de cette erreur est que si vous avez fait quelque chose dans ce cas:

  1. Cliquez avec le bouton droit sur le dossier dans le projet pour créer un nouveau UserControl. Cela crée un fichier de classe et xaml qui dérive du contrôle utilisateur dans l'espace de noms du dossier.

  2. Ensuite, vous décidez de modifier l'espace de noms de la classe car vous n'utilisez vraiment que des dossiers pour l'organisation du code. L'attribut x: Class ne sera pas automatiquement mis à jour, il recherchera donc une classe qui n'existe pas. Pourrait probablement utiliser un meilleur message d'erreur comme «x: le type de classe est introuvable dans le namesace bla.blaa.blaaa».

user1834059
la source
5

Une autre solution à ce problème consiste à simplement changer la propriété-> Build Action sur le XAML de Embedded Resource à quoi que ce soit d'autre, à enregistrer, puis à la modifier de nouveau à Embedded Resource. L'erreur disparaît.

Mark McCorkle
la source
Cela a fonctionné deux fois;)
Flou
4

Je sais que cela a été répondu en raison d'une cause différente, mais c'est une publication très populaire et j'avais rencontré le même problème avec une bibliothèque de classe. Dans ce cas, il s'est avéré être à la fois un changement dans mon espace de noms (répondu dans ce post ici ) et que le compilateur n'a pas pu reconstruire le Window.gics qui définit la méthode InitializeComponent (). Cela n'a pas pu car la bibliothèque de classes n'avait pas la valeur ProjectTypeGuid pour les projets WPF dans le fichier csproj. Les instructions pour cela sont ici et ici . J'ai pensé que je partagerais au cas où quelqu'un d'autre aurait rencontré le même problème. Changer simplement l'espace de noms n'est pas suffisant dans ce cas.

bjhuffine
la source
3

Cela m'est arrivé car un programme de désinstallation de package Nuget a supprimé tous les attributs de l'élément <Application> dans App.xaml. Cela comprenait l'attribut x: Class, qui spécifie le nom de la classe d'application. La classe partielle contenant la méthode InitializeComponent () n'a donc jamais été générée.

J'ai résolu le problème en rétablissant App.xaml sur la copie contrôlée par la source.

Richard Beier
la source
J'ai eu la même erreur en raison d'un attribut x: Class manquant, mais cela n'avait rien à voir avec Nuget. Il a juste disparu d'une manière ou d'une autre, probablement de la magie du studio visuel.
Ismail Degani
3

Cela l'a résolu pour moi.

J'avais commenté les ressources du fichier App.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>

Commenter cela de nouveau pour corriger 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 profondément, j'ai trouvé que le fichier app.g.cs dans {Project} \ obj \ debug ne contenait les éléments suivants que lorsque j'ai laissé la ressource commentée.

/// <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
}
bic
la source
3

Pour ceux qui trouvent cela sur Internet. Vérifiez le fichier Windows.csproj si la compilation existe. 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>
acsadam0404
la source
Dans mon csproj, il me manquait le <DependentUpon>YourFile.xaml</DependentUpon>pour une raison quelconque et c'est ce qui l'a corrigé pour moi!
Isaac Baker du
3

Si les espaces de noms sont corrects, il y a aussi une même erreur,

Fermez simplement votre application et ouvrez-la à nouveau .

Cela peut résoudre votre problème

Syed Siraj Wajeed
la source
ouvrir et fermer un studio visuel que vous voulez dire?
LuckyLikey
Parfois, XDesProc.exe (Microsoft Visual Studio XAML UI Designer) arrêtera le Visual Studio pour fonctionner correctement et ne chargera pas le fichier xaml correctement. Le redémarrage de Visual Studio a donc résolu mon problème. (Vous pouvez également accéder aux processus dans le Gestionnaire des tâches et arrêter uniquement ce processus sans redémarrer Visual Studio).
Syed Siraj Wajeed,
J'ai découvert cela dans VS2017. J'avais changé tout le reste et les espaces de noms étaient corrects partout mais les appels InitializeComponent () avaient l'erreur, et les mots-clés partiels dans les fichiers xaml.cs avaient un avertissement, quelque chose comme "la classe partielle n'a qu'un seul fichier". Il m'est arrivé de fermer et de rouvrir la solution et j'ai découvert que ces deux problèmes se sont résolus d'eux-mêmes.
Steve Crane
3

Après une action, l'espace de noms du fichier .cs et celui du fichier .xaml peuvent être différents (dans xaml, recherchez x: Class = "namespace.yourType").

Fixez-les pour qu'ils soient les mêmes.

Mauro Sampietro
la source
3

J'ai découvert que «l'objet de démarrage» était (non défini) à l'origine de cette erreur pour moi.

"Objet de démarrage" (non défini)

Roche
la source
Tous les autres détails mentionnés dans la question étaient les mêmes?
marklark
2
Les détails exacts ne sont pas exacts étant donné que la question n'était pas claire sur la façon dont l'exception s'est manifestée. Cependant, le symptôme sous-jacent est identique, donc je ne vois rien de mal à ma réponse. Mon intention était d'ajouter à la conversation car aucune réponse / commentaire n'a aidé dans mon cas. J'essayais simplement d'ajouter à la base de connaissances pour les erreurs de compilation souvent non descriptives.
Rock
1
Merci! Cela a résolu mon problème! Il semble que l'option donnée ( objet de démarrage ) a été remis à zéro automatiquement lorsque je me suis déplacé le MainWindow.xaml du rootau Viewrépertoire.
AlexMelw
3

Étant donné que cela semble être le fil conducteur pour le problème concernant «InitializeComponent» manquant, je vais inclure ma réponse ici.

Moi aussi, je rencontrais ce problème et j'ai essayé tout ce que j'ai trouvé ici et dans tous les autres forums que Google pouvait trouver, mais aucun n'a résolu le problème pour moi. Après deux heures de tout essayer, j'ai finalement compris ce qui n'allait pas avec ma configuration.

Dans notre projet, nous utilisons des composants Metro de MahApps . La vue qui me posait problème était une vue héritée 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 comme

<Controls:MetroWindow.Resources>
    <prop:Resources x:Key="LocalizedStrings"/>
    ...
</Controls:MetroWindow.Resources>

C'est ainsi que j'ai défini les ressources dans UserControls dans toutes mes autres vues, c'est donc ce que je supposais fonctionner.

Ce n'était cependant pas le cas avec Controls:MetroWindow! Là, j'avais absolument besoin de la définition des ressources comme suit:

<Controls:MetroWindow.Resources>
    <ResourceDictionary>
        <prop:Resources x:Key="LocalizedStrings"/>
        ...
    </ResourceDictionary>
</Controls:MetroWindow.Resources>

Donc, mon problème, en résumé, était une <ResourceDictionary>balise manquante . Je ne sais vraiment pas pourquoi cela a produit l'erreur «InitializeComponent» et il ne l'a étrangement même pas produite sur toutes mes machines, mais c'est comme ça que je l'ai corrigée. J'espère que cela vous aidera (les 0,001% restants de personnes rencontrant ce problème).

Tom Ladek
la source
2

Je viens de rencontrer 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 une panne de réseau momentanée. J'ai fait une construction; il se plaignait que mes fichiers avaient été modifiés en dehors de l'éditeur (ils ne l'avaient pas fait; les verrous de fichiers venaient d'être bouchés), et cela s'est bien passé, supprimant l'erreur concernant la InitializeComponent()méthode.

BTW, au cas où vous vous poseriez la question, développer quelque chose à partir d'un lecteur réseau est une mauvaise pratique. Cela devient particulièrement problématique lorsque vous essayez de tirer parti du code managé de .NET; d'après mon expérience, cela panique à chaque fois que vous construisez. J'ai oublié de mettre ce petit projet à jeter dans le bon dossier et j'ai fini par en payer le prix.

JD Ray
la source
2

Une autre explication possible est que vous construisez contre x86. Cliquez avec le bouton droit sur votre solution et choisissez Configuration Manager. Voyez si vous construisez contre x86 au lieu de N'importe quel CPU.

Peter
la source
2

Je me rends donc compte que c'est une question plus ancienne, mais nous avions un problème similaire. Nous avons pu créer un projet en utilisant VS2012, mais pas en utilisant msbuild à partir de la ligne de commande. Je suis allé dans le fichier .proj et j'ai remarqué qu'il n'avait pas d'enregistrement pour "ProjectTypeGuids" dans la section par défaut "PropertyGroup", alors j'ai ajouté ceci:

<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

qui est le GUID du projet pour WPF. J'ai ensuite supprimé et rajouté UserControl et il a commencé à fonctionner. Je ne sais pas si je devais faire cette dernière étape, mais cela fonctionne pour moi maintenant.

Jon Nos
la source
2

Pour une raison quelconque, après avoir copié .xaml et ses .cs entre les projets, l'action de génération change parfois. Veuillez vous assurer que l'action de génération de votre .xaml est Page.

Marek Malczewski
la source