ILMerge错误:密钥需要大于0

时间:2015-09-18 15:27:30

标签: .net ilmerge

我们在构建服务器上有一个步骤,它将我们的DLL合并为一个便于传输。

在我们的QA环境中,运行ILMerge时出现以下错误

An exception occurred during merging:
Key needs to be greater than 0.
Parameter name: key
   at System.Compiler.TrivialHashtable.get_Item(Int32 key)
   at System.Compiler.Ir2md.GetTypeSpecIndex(TypeNode type)
   at System.Compiler.Ir2md.GetMemberRefIndex(Member m)
   at System.Compiler.Ir2md.GetMethodToken(Method m)
   at System.Compiler.Ir2md.VisitConstruct(Construct cons)
   at System.Compiler.Ir2md.VisitAssignmentStatement(AssignmentStatement assignment)
   at System.Compiler.Ir2md.VisitBlock(Block block)
   at System.Compiler.Ir2md.VisitBlock(Block block)
   at System.Compiler.Ir2md.VisitMethodBody(Method method)
   at System.Compiler.Ir2md.VisitMethod(Method method)
   at System.Compiler.Ir2md.VisitClass(Class Class)
   at System.Compiler.Ir2md.VisitModule(Module module)
   at System.Compiler.Ir2md.SetupMetadataWriter(String debugSymbolsLocation)
   at System.Compiler.Ir2md.WritePE(Module module, String debugSymbolsLocation, BinaryWriter writer)
   at System.Compiler.Writer.WritePE(String location, Boolean writeDebugSymbols, Module module, Boolean delaySign, String keyFileName, String keyName)
   at System.Compiler.Writer.WritePE(CompilerParameters compilerParameters, Module module)
   at ILMerging.ILMerge.Merge()
   at ILMerging.ILMerge.Main(String[] args)

任何想法如何解决这个问题?我们有太多的代码和太多的DLL,因此它对我提供有关我们尝试合并的DLL的更多信息非常有用。

正在合并的代码今天早上从我们的开发线分支出来 - 代码与开发线完全相同,它可以很好地ILMerge。

合并错误发生在我们的本地计算机以及构建服务器上。

我知道这不是很重要,但我已经得到了所有这些!

在发布模式下构建代码后,IL合并正常工作。

2 个答案:

答案 0 :(得分:2)

不完全是答案,但您可以尝试ILRepack,它与ILMerge具有相同的语法,但代码是开源的,异常(如果有的话)可能更明确(不保证虽然)。

此外,如果您的目标程序集已签名,那么“密钥”可能会以某种方式引用其签名密钥,以防它有助于您进入某个轨道。

答案 1 :(得分:0)

我的回答有点陈旧,但我遇到了同样的问题,也许对某人有帮助。

我有异常,在Visual Studio中的post build事件中有ILMerge操作。我知道这听起来有多愚蠢,但解决方案是用普通方法替换所有delegatesActionFunc<>。在发布模式下构建时问题也消失了