5

ILMerge バージョン 2.11.1103.0 を使用して、4 つの DLL を新しいアセンブリにマージしています。それらを A、B、C、D と呼ぶと、それらの関係は次のようになります。

B -> A
C -> A
D -> A
D -> C

A、B、C で ILMerge を実行すると、すべて問題なく動作します。ただし、DI を追加すると、次のエラーが表示されます。

An exception occurred during merging:
ILMerge.Merge: The assembly 'A' was not merged in correctly.
It is still listed as an external reference in the target assembly.
   at ILMerging.ILMerge.Merge()
   at ILMerging.ILMerge.Main(String[] args)

ここで示されているように /closed オプションを使用してみましたILMerge DLL: アセンブリが正しくマージされず、外部参照としてリストされていますが、残念ながら役に立ちません:

In order to close the target assembly, the number of assemblies to be added to the input is 0.

アセンブリの順序を変更すると、次の例外が発生します。

An exception occurred during merging:
Index was outside the bounds of the array.
   at System.Compiler.ISymUnmanagedWriter.CloseMethod()
   at System.Compiler.Ir2md.VisitMethodBody(Method method)
   at System.Compiler.Ir2md.VisitMethod(Method method)
   at System.Compiler.Ir2md.Visit(Node node)
   at System.Compiler.Ir2md.VisitClass(Class Class)
   at System.Compiler.Ir2md.Visit(Node node)
   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 System.Compiler.Module.WriteModule(String location, CompilerParameters options)
   at ILMerging.ILMerge.Merge()
   at ILMerging.ILMerge.Main(String[] args)

私が使用している完全なコマンドラインは次のとおりです。

ILMerge.exe /targetplatform:v4,"C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0" /log:ilmerge.log /target:library /union /xmldocs /copyattrs /allowMultiple /internalize /closed /keyfile:keyfile.snk /out:Merged.dll A B C D

誰が私が間違っているのかを見ることができますか? ありがとう。

4

2 に答える 2

4

上記のコメントで@HansPassantが示唆しているように、私はMicrosoftで有名なMikeBarnettに連絡しました。彼は私がこれを修正するのを手伝ってくれました:

  • http://nuget.org/packages/ilmergeから最新バージョンのilmerge(2.12.0803)にアップグレードする

  • コマンドから/unionスイッチを削除します(これは、コードコントラクトのリライターによってリライトされたマージされたアセンブリでgendarmeを実行する問題を解決するために以前に追加されました。ビルドプロセスの変更により、これは不要になりました)。

于 2012-08-21T01:03:16.433 に答える
1

以前に ILMerge が機能しないという問題に遭遇しました。それらは単なるバグだと思います...複数のフェーズでマージしてみてください。たとえば、B と A を A' にマージし、次に A' を C と D にマージします。解決につながる可能性のある異なる結果/エラーが発生する可能性があります。

于 2012-08-02T20:24:26.813 に答える