WPF错误CS0433

7

我在我的WPF应用程序中遇到了这个错误。但并非每次都会出现。如果我执行清理操作,然后重新构建,一切都正常。

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'
5个回答

3
你可以使用 RummageTypeRenamer,这是我们的混淆器 Rummage(我在 Aldaray 工作)捆绑的免费工具,将 GeneratedInternalTypeHelper 类型重命名为其他名称。
我们将其重命名为类似于 GeneratedInternalTypeHelper$(ProjectName) 的名称,以确保它在项目间唯一且不会发生冲突。我们在所有构建脚本中都这样做 以使 ILMerge 起作用(我的同事在私人博客中发布了相关文章)。

对我有用。我把它放在 post-build 中,就像这里一样。 - Andrey K.

1

这里有一篇由Scott Hanselman撰写的文章,讨论了WPF中的这个问题。

其他遇到这个问题的人已经通过安装一些热修复程序来解决了。请查看这篇文章以获取更多信息。

如果您正在使用Citrix,您可能需要查看此处。您可能会遇到权限问题。这篇特定的文章涉及ASP .NET应用程序,但是您在WPF应用程序中可能会遇到类似的问题。这是一个很好的起点。


我不使用 Citrix。不确定是否因为提到的文章中提供的热修补程序。我今天才遇到这个错误。它在过去几个月内一直运行完美。 - Pashec

0

我试图弄清楚为什么我的库中有这个生成的类XamlGeneratedNamespace.GeneratedInternalTypeHelper。MSDN says 没有任何有用的信息:

由工作流设计器生成的类,用于为XAML文档生成CLR类型。

但我找到了导致生成此类的代码行:

<Grid DataContext="{TemplateBinding InternalDataContext}">

我将其替换为“运行时等效项”:
<Grid DataContext="{Binding InternalDataContext, RelativeSource={RelativeSource TemplatedParent}}">

也许这可以帮助某些人。


0

在运行应用程序后,您可以在c:\ Users \\ AppData \ Local \ Temp \中找到XmlSerializer生成的代码, 它将是something.cs。我的是:“me2ywucq.0.cs”,只需在其代码中搜索您的类型名称即可。

当它在运行时创建程序集时,您还可以更改它写入代码的路径 请参见{{link1:Changing where XmlSerializer Outputs Temporary Assemblies by scott}}
将以下内容添加到您的app.config或web.config:

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

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

0

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


在一个项目中,我没有使用XML序列化程序集生成器,所以我将其禁用了。这有所帮助。但我仍然很好奇为什么会这样,并且如果我需要在两个项目中运行sgen,如何修复它。 - Pashec

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接