ILMerge.Merge:ERROR !!:在程序集中找到重复的类型

时间:2014-08-13 04:21:52

标签: .net .net-4.5 post-build-event ilmerge

我会尽量简单,如果您需要更多信息,请告诉我。我下载了ILMerge以将Newtonsoft.Json.dll合并到我的类库中。我正在使用以下内容从post-build事件命令行调用ILMerge:

"$(ProjectDir)bin\ILMerge.exe" /internalize:"$(ProjectDir)bin\ILMergeIncludes.txt" /out:"$(TargetDir)$(TargetName).all.dll" "$(TargetDir)$(TargetName).dll" "$(TargetDir)*.dll" /target:library /targetplatform:v4,C:\Windows\Microsoft.NET\Framework64\v4.0.30319 /wildcards

在输出窗口中显示:

An exception occurred during merging:
  ILMerge.Merge: ERROR!!: Duplicate type 'myLibrary.some.class' found in assembly 'myLibrary.all'. Do you want to use the /alllowDup option?
     at ILMerging.ILMerge.MergeInAssembly(AssemblyNode a, Boolean makeNonPublic, Boolean targetAssemblyIsComVisible)
     at ILMerging.ILMerge.Merge()
     at ILMerging.ILMerge.Main(String[] args)

问题是' myLibrary.some.class'不是重复。

我一直在互联网上寻找线索,所有我发现的是以下2个链接,以及一些网页应用程序,其中人们有复制/粘贴的页面,忘记更改班级名称。

similar problem with a solution that doesn't seem relevant

same cry for help but with no answers

我尝试过使用allowDup选项,但在合并的dll中,它会变成' myLibrary.some.class'进入' myLibrary.some.random125624.class'。然后我尝试使用allowDup传入' class'但后来我得到了#34;重复类型" ' class2'的错误然后' class3'然后' class4' ...似乎没有结束重复类型的数量!

我确定这些类不重复,因为命名空间对我的公司和项目非常具体。

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:1)

我有同样的问题,使用Fody(https://github.com/Fody/Costura)为我工作。

确保在构建之后正确设置它以删除所有不必要的文件(创建一个干净的输出目录部分)并且你将有一个dll或exe。

希望它有所帮助!

答案 1 :(得分:0)

在命令行中,告诉ILMerge使用一个库tiwce
ILMerge使用"$(TargetDir)*.dll" /wildcards获取TargetDir中的所有dll-filese,然后再次添加文件"$(TargetDir)$(TargetName).dll"

所以解决方案非常简单。试试这个命令行:
"$(ProjectDir)bin\ILMerge.exe" /internalize:"$(ProjectDir)bin\ILMergeIncludes.txt" /out:"$(TargetDir)$(TargetName).all.dll" "$(TargetDir)*.dll" /target:library /targetplatform:v4,C:\Windows\Microsoft.NET\Framework64\v4.0.30319 /wildcards

答案 2 :(得分:0)

我知道这是一个古老的问题,但这是第一个Google回报此错误(无论如何对我而言)。

对于我来说,如今,便宜又讨厌的解决方案是在命令行的选项中简单地添加“ / union”。