我会尽量简单,如果您需要更多信息,请告诉我。我下载了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' ...似乎没有结束重复类型的数量!
我确定这些类不重复,因为命名空间对我的公司和项目非常具体。
有人可以帮忙吗?
答案 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”。