2010-10-01 7 views
7

Recibo este error en mi aplicación WPF. Me sale este error no siempre. Si hago Clean y luego Rebuild todo está bien.Error 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' 

Respuesta

1

Aquí hay un article de Scott Hanselman discutiendo este tema para WPF.

Otras personas que han tenido este problema lo han solucionado instalando algunas revisiones. Consulte this article para obtener más información.

Si está usando Citrix, es posible que desee check this out. Podría tener un problema de permisos. Este artículo en particular se ocupa de una aplicación ASP .NET, pero es posible que tenga un problema similar en su aplicación WPF. Es un buen lugar para comenzar.

+0

No uso Citrix. No estoy seguro de si es debido a las revisiones provistas en el artículo mencionado. Recibí este error solo hoy.Funcionó perfecto durante varios meses. – Pashec

0

Este error proviene del generador de ensamblaje de serialización XML compilado persistente. Genera clases a partir de tipos serializables XML. Si no lo usa, puede desmarcar esto en las propiedades del proyecto.

+0

En un proyecto, no uso el generador de conjuntos de serialización XML, así que lo desactivo. Eso ayudo. Pero todavía tengo curiosidad de por qué sucedió y cómo solucionarlo si tuviera que ejecutar sgen en ambos proyectos. – Pashec

0

Traté de averiguar por qué tengo esta clase generada XamlGeneratedNamespace.GeneratedInternalTypeHelper en mi biblioteca. MSDN says nada útil:

Una clase generada por el flujo de trabajo diseñador utiliza para generar tipos CLR de documentos XAML.

Pero encontré la línea de código que provoca la generación de esta clase:

<Grid DataContext="{TemplateBinding InternalDataContext}"> 

lo sustituyó con "equivalente en tiempo de ejecución":

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

Tal vez puede ayudar a alguien.

3

Puede usar RummageTypeRenamer, una herramienta gratuita incluida con nuestro ofuscador Rummage (yo trabajo para Aldaray), para cambiar el nombre del tipo GeneratedInternalTypeHelper a otra cosa.

Lo cambiamos a algo así como GeneratedInternalTypeHelper$(ProjectName) para que sea único en todos los proyectos y nunca se produzcan enfrentamientos. Hacemos eso en todos nuestros scripts de compilación to get ILMerge to work (entrada de blog en el blog privado de mi colega).

+0

funcionó para mí. Lo puse en construcción posterior como [aquí] (http://stackoverflow.com/q/19436532/2772330). –

0

puede encontrar el código generado por XmlSerializer en c: \ Users \\ AppData \ Local \ Temp \ después de ejecutar su aplicación, será algo.cs. El mío era: "me2ywucq.0.cs", simplemente busca texto para tu nombre de tipo dentro de su código.

También puede cambiar la ruta que escribe el código que cuando se crea asambleas en tiempo de ejecución ver Changing where XmlSerializer Outputs Temporary Assemblies by scott
Añadir lo siguiente a su app.config o web.config:

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

Después de encontrar el código puede compilarlo usted mismo en myAssembly.XmlSerializers.dll o implementar IXmlSerializer en su código, sin romper la compatibilidad con las serializaciones anteriores.