我会尽可能简单地说明这一点,如果您需要更多信息,请告诉我。我下载了ILMerge合并Newtonsoft.Json.dll进入我的类(class)图书馆。我使用以下命令从构建后事件命令行调用 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”不是重复的。
我一直在互联网上寻找线索,我发现的只是以下两个链接,以及一些网络应用程序的案例,人们复制/粘贴页面并忘记更改类名称。
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”,但随后我收到“class2”的“重复类型”错误,然后是“class3”,然后是“class4”...重复类型的数量似乎没有尽头!
我确信这些类不会重复,因为命名空间对于我的公司和项目来说是非常特定的。
有人可以帮忙吗?
最佳答案
在命令行中告诉 ILMerge 使用一个库 tiwce
ILMerge 使用 "$(TargetDir)*.dll"/wildcards
获取 TargetDir 中的所有 dll 文件,并再次添加文件 "$(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/通配符
关于.net - ILMerge.Merge : ERROR! !: 程序集中发现重复类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25277994/