61 votes

Problèmes après avoir copié les contrôles XAML de l'application WPF vers une bibliothèque de classes

Lors du remaniement d'un certain code, j'ai rencontré plusieurs erreurs de compilation telles que celles-ci :

Le fichier du projet de bibliothèque ne peut pas spécifier l'élément ApplicationDefinition.

Le fichier du projet contient une valeur de propriété qui n'est pas valide.

Comment résoudre ces erreurs ?

136voto

fubaar Points 1505

Lorsque vous copiez et collez des fichiers, que ce soit à l'intérieur d'un projet ou vers un autre projet, Visual Studio a la fâcheuse habitude de ne pas conserver les mêmes fichiers. BuildAction propriété. Il modifie souvent l'action de construction à une valeur apparemment aléatoire, par ex. ApplicationDefinition ce qui provoque cette erreur de construction.

Vérifiez (dans la fenêtre des propriétés de Visual Studio, le fichier étant sélectionné dans l'explorateur de solutions) que chacun de vos fichiers .xaml comporte un élément BuildAction propriété de Page et vos fichiers de code ont un BuildAction propriété de Compiler .

1 votes

Bizarre - j'ai divisé mes fichiers XAML en 2 DLLs supplémentaires. Toutes mes pages ont été marquées avec AppDef et mon App.xaml a été marqué comme Page :) Merci pour le post, ils doivent soit corriger l'IDE ou au moins améliorer le message d'erreur sur celui-ci (mettre en lumière la cause).

0 votes

Notez que ce n'est pas spécifique aux fichiers .xaml, j'ai eu le même problème avec les fichiers .ps (Pixel Shaders compilés).

2 votes

J'ai eu ce problème un certain nombre de fois et je n'ai jamais pensé que c'était l'action de construction qui manquait, donc j'ai toujours fait de gros efforts pour contourner le problème... Merci pour cela, vous allez m'épargner une tonne de temps et de frustration maintenant lol.

26voto

ouflak Points 1206

Vous pouvez également voir ce message même si vos actions de construction sont correctement définies. Par exemple, si vous démarrez votre projet en tant qu'application et que vous le transformez ensuite en bibliothèque de classes. Dans ce cas, vous devez également penser à supprimer App.xaml (et le App.cs correspondant).

2 votes

Ou simplement le renommer pour une éventuelle utilisation ultérieure

3 votes

Toujours un problème avec .NET CORE (10/06/2020). J'ai juste renommé le fichier App.xaml et ensuite "pouf" tout fonctionne.

4voto

dmo Points 1886

L'action de construction du contrôle Xaml doit passer d'ApplicationDefinition à Page (cette propriété est accessible en cliquant avec le bouton droit de la souris sur le contrôle dans l'arborescence de Solution Explorer et en sélectionnant Propriétés).

3voto

aditya potdar Points 254

C'est également le cas lorsque nous copions-collons un fichier image/XAML dans le projet ClassLibrary.

Changez la propriété "Build Action" de cette image en ressources

1voto

TaterJuice Points 503

Deux ans plus tard, je me suis posé la même question, mais je n'ai pu utiliser les commentaires ci-dessus que pour écarter d'autres options et finalement trouver ma réponse lorsque j'ai remarqué que les deux projets avaient tous deux le même fichier .xaml au nom identique dans une seule solution.


Exemple de résumé

1 solution qui a 2 projets : PRINTNOTESPROJ et MAKENOTESPROJ.

Pendant le développement, j'ai utilisé une fenêtre XAML dans MAKENOTESPROJ qui devrait en fait faire partie de PRINTNOTESPROJ dans les exécutables de la version.

Après avoir basculé vers Build->Release, j'ai simplement cliqué sur "PrintWindow.XAML" (dans MAKENOTESPROJ & avec son enfant PrintWindow.xaml.cs) et je l'ai DRAGGÉ sur mon PRINTNOTESPROJ.

*C'est la clé. J'ai oublié que cette opération ne fait que COPIER les fichiers concernés dans le nouveau projet [du moins dans VS 2010]. À partir de ce moment, j'ai reçu votre erreur jusqu'à ce que je supprime "PrintWindow.xaml" de mon projet original MAKENOTESPROJ.

J'espère que cela a un sens... N'hésitez pas à commenter si vous avez des questions !

0 votes

Bonne prise. Je suis content que les commentaires/réponses ci-dessus aient pu aider au moins un peu. Plus un.

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