私は最近(以前は気づかなかった)問題に遭遇しました。2つのアセンブリをマージすると、基本型(System.Object)が「失われた」1つ以上の型になります。結果の内外でリフレクションを使用しようとすると失敗します。組み立て。
どちらのアセンブリも.NET4.5ベースであり、プライマリアセンブリはASP.NETMVC4アプリケーションです。新しいWebAPIとそれに関連する依存関係リゾルバーを採用する前に、リフレクションの問題を回避することができました(したがって、リフレクションを制御することはできません)。
マージ自体にはエラーや問題はなく、正しいv4をターゲットにしていることに注意してください; [プログラムファイル-参照されるアセンブリ]、AnyCPUベースなど(すべてのケースをカバーしたとほぼ100%確信しています-間違っている可能性があります:))
他の誰かがこれに遭遇しましたか?この問題を解決するにはどうすればよいですか?
編集:2013年3月20日
ILMergeバージョン2.13.307.0Copyright
(C)MicrosoftCorporation2004-2006。全著作権所有。
ILMerge / ndebug / useFullPublicKeyForReferences / keyfile:[pathToSNK] /log:output.log / targetplatform:v4、C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 / lib:[ManyOfThis] / align:4096 / out:[ターゲット].dll[ソース].dll[ToMerge] .dll
Microsoft(R).NET Framework v4.0.30319
mscorlib.dll version = 4.0.0.0で実行されているmscorlib.dllのディレクトリ「C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319」を使用して、プラットフォームを「v4」に設定します
。入力アセンブリのリストは次のとおりです:[Source] .dll、[ToMerge] .dll
-ファイル'[Source].dll'からアセンブリを読み取ろうとしています。
アセンブリで正常に読み込まれました。
[ソース]のメタデータで報告されたエラーはありませんでした。
-ファイル'[ToMerge].dll'からアセンブリを読み取ろうとしています。
アセンブリで正常に読み込まれました。
[ToMerge]のメタデータで報告されたエラーはありませんでした。
-すべての入力アセンブリに互換性のあるPeKindがあることを確認します。
[ソース].PeKind= ILonly
[ToMerge] .PeKind=ILonly-
すべての入力アセンブリには互換性のあるPeKind値があります。
[それぞれが成功して終了するいくつかのAssemblyResolverセクション]
-ターゲットアセンブリのアセンブリレベルの属性にアセンブリ'[Source]'を使用します。
-アセンブリ'[ソース]'をターゲットアセンブリにマージします。
-アセンブリ'[ToMerge]'をターゲットアセンブリにマージします。
-重複するタイプ名:タイプ'[SomeAnonymousType]'(アセンブリ'[ToMerge]'から)の名前を'[ToMerge]。[SomeAnonymousType]'
に変更します-アセンブリ'[Source]'からターゲットアセンブリに1つのWin32リソースをコピーします。
-ILMerge:キーファイル':[pathToSNK]'を使用してアセンブリに署名します。
ターゲットアセンブリのメタデータで報告されたエラーはありませんでした。
-ILMerge:ターゲットアセンブリ'[Target].dll'を書き込んでいます。
[それぞれが成功して終了するいくつかのAssemblyResolverセクション]
-ILMerge:厳密な名前で署名されたアセンブリ'[Source].dll'。[エラーのない場所の数]
-ILMerge:完了しました。
PEVerify.exe / MD / IL [Target] .dll
35エラー(212警告)。