我想创建一个包含Castle.Core的FakeItEasy工具的合并版本。我了解了ILMerge,并且认为它是我所需要的解决方案。在下载和构建FakeItEasy之后,我将所需的所有文件(FakeItEasy.dll(.NET4),Castle.Core.dll(.NET4),ilmerge.exe,FakeItEasy.snk)复制到同一文件夹中。然后我运行了以下命令:
ilmerge
/keyfile:FakeItEasy.snk
/out:..\FakeItEasy.dll
/t:library
/targetplatform:v4,C:\Windows\Microsoft.NET\Framework\v4.0.30319
FakeItEasy.dll Castle.Core.dll
并得到以下结果:
An exception occurred during merging:
An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)
at System.Compiler.Writer.MscorsnStrongNameSignatureGeneration(String wszFilePath, String wszKeyContainer, Byte[] pbKeyBlob, Int32 cbKeyBlob, IntPtr ppbSignatureBlob, IntPtr pcbSignatureBlob)
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)
如果我把"/keyfile:FakeItEasy.snk"省略掉,合并后的程序集可以正常创建,但这对我没有帮助,因为我需要一个签名版本。
我还尝试指定目标平台为:
/targetplatform:v4,C:\Windows\Microsoft.NET\Framework64\v4.0.30319
但是结果都一样。
corflags ilmerge /32bitreq+ /force
,将其强制运行在32位模式下而不是64位。 - jnm2