2010-10-01 8 views
7

Je reçois cette erreur dans mon application WPF. Je reçois cette erreur pas toujours. Si je fais la propreté, puis reconstruisons tout est ok.Erreur WPF CS0433

SGEN (0,0):            
error: Unable to generate a temporary class (result=1). 

SGEN (0,0): 
errorCS0433: The type 'XamlGeneratedNamespace.GeneratedInternalTypeHelper' exists in both 'library1.dll' and 'library2.dll' 

Répondre

1

Voici un article de Scott Hanselman traitant de ce problème pour WPF.

D'autres personnes ayant eu ce problème l'ont corrigé en installant quelques correctifs. Consultez this article pour plus d'informations. Si vous utilisez Citrix, vous pouvez vouloir check this out. Vous pourriez avoir un problème d'autorisations. Cet article particulier traite d'une application ASP .NET, mais vous pouvez rencontrer un problème similaire dans votre application WPF. C'est un bon endroit pour commencer.

+0

Je n'utilise pas Citrix. Je ne sais pas si c'est à cause des correctifs fournis dans l'article mentionné. J'ai eu cette erreur seulement aujourd'hui.Cela a fonctionné parfaitement pendant plusieurs mois. – Pashec

0

Cette erreur provient du générateur d'assembly de sérialisation XML compilé persistant. Il génère des classes à partir de types XML sérialisables. Si vous ne l'utilisez pas, vous pouvez décocher ceci dans les propriétés du projet.

+0

Dans un projet, je n'utilise pas de générateur d'assemblage de sérialisation XML, donc je le désactive. Ça m'a aidé. Mais je suis toujours curieux de savoir pourquoi cela est arrivé et comment y remédier si j'avais besoin de lancer sgen dans les deux projets. – Pashec

0

J'ai essayé de comprendre pourquoi j'ai généré cette classe XamlGeneratedNamespace.GeneratedInternalTypeHelper dans ma bibliothèque. rien MSDN says utile:

Une classe générée par le flux de travail concepteur utilisé pour générer les types CLR pour les documents XAML.

Mais je trouve la ligne de code qui provoque la génération de cette classe:

<Grid DataContext="{TemplateBinding InternalDataContext}"> 

Je l'ai remplacé par "exécution équivalent":

<Grid DataContext="{Binding InternalDataContext, RelativeSource={RelativeSource TemplatedParent}}"> 

Peut-être qu'il peut aider quelqu'un.

3

Vous pouvez utiliser RummageTypeRenamer, un outil gratuit livré avec notre obfuscator Rummage (je travaille pour Aldaray), pour renommer le type GeneratedInternalTypeHelper à autre chose. Nous le renommons en quelque chose comme GeneratedInternalTypeHelper$(ProjectName) afin qu'il soit unique à travers les projets et ne se heurte jamais. Nous le faisons dans tous nos scripts de construction to get ILMerge to work (entrée de blog dans le blog privé de mon collègue).

+0

A travaillé pour moi. Je l'ai mis en post-build comme [ici] (http://stackoverflow.com/q/19436532/2772330). –

0

Vous pouvez trouver le code généré par XmlSerializer dans c: \ Users \\ AppData \ Local \ Temp \ après l'exécution de votre application, ce sera quelque chose.cs. Le mien était: "me2ywucq.0.cs", juste la recherche de texte pour votre nom de type dans son code.

Vous pouvez également modifier le chemin, il écrit le code lorsqu'il crée des assemblages à l'exécution voir Changing where XmlSerializer Outputs Temporary Assemblies by scott
Ajouter ce qui suit à votre app.config ou web.config:

<system.xml.serialization> 
    <xmlSerializer tempFilesLocation="c:\\foo"/> 
</system.xml.serialization> 

Après avoir trouvé le code vous pouvez le compiler vous-même dans un fichier myAssembly.XmlSerializers.dll ou implémenter IXmlSerializer dans votre code, sans rompre la compatibilité avec les sérialisations prev.