关于.net:WPF错误CS0433

WPF error CS0433

我在WPF应用程序中遇到此错误。我并非总是会收到此错误。如果我先进行清理,然后重建,则一切正常。

1
2
3
4
5
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'

您可以使用与混淆器Rummage捆绑在一起的免费工具RummageTypeRenamer(我为Aldaray工作)将GeneratedInternalTypeHelper类型重命名为其他名称。

我们将其重命名为GeneratedInternalTypeHelper$(ProjectName)之类的名称,这样它在项目中是唯一的,并且不会发生冲突。我们在所有构建脚本中都这样做,以使ILMerge正常工作(我的同事的私人博客中的博客条目)。


这是Scott Hanselman的一篇文章,讨论了WPF的这一问题。

遇到此问题的其他人已通过安装一些修补程序解决了该问题。请查看本文以获取更多信息。

如果您使用的是Citrix,则可能需要检查一下。您可能遇到权限问题。本文特别介绍了ASP .NET应用程序,但是WPF应用程序中可能存在类似的问题。这是一个很好的起点。


您可以在c:\\\\ Users \\\\\\\\ AppData \\\\ Local \\\\ Temp \\\\中找到XmlSerializer生成的代码
运行您的应用程序后,它将是something.cs。
我的名字是:" me2ywucq.0.cs",只是在代码中用文本搜索您的Type名称。

您还可以更改在运行时创建程序集时将代码写入的路径
请参见通过scott更改XmlSerializer在哪里输出临时程序集的位置
将以下内容添加到您的app.config或web.config:

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

找到代码后,您可以将自己编译为myAssembly.XmlSerializers.dll或在代码中实现IXmlSerializer,而不会破坏与先前序列化的兼容性。


我试图弄清楚为什么我的库中有这个生成的类XamlGeneratedNamespace.GeneratedInternalTypeHelper。 MSDN没什么帮助:

A class generated by the workflow
designer used to generate CLR types
for XAML documents.

但是我发现了导致生成此类的代码行:

1
<Grid DataContext="{TemplateBinding InternalDataContext}">

我将其替换为"运行时等效项":

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

也许对某人有帮助。


此错误来自持久编译的XML序列化程序集生成器。它从XML可序列化类型生成类。如果不使用它,则可以在项目属性中取消选中它。