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
しかし、結果は同じでした。