ILMergeで失敗する ~2

またILMergeがうまくいきません。
だいたい、プロジェクトが締め切り間近になって、ほぼ開発が終了したころに、
やってくるこの時間です。

プロジェクトをリビルドすると、依存関係がうまくいっていないのか、ビルドに失敗します。
カスタムコントロールのプロジェクトが先にビルドされれば大丈夫と思い、依存関係をいじったら
ビルドできなくなりました。

色々と恐る恐る、いじってみると、
アセンブリに署名」が問題をおこしているようでした。

カスタムコントロール等の「アセンブリに署名する」のチェックをすべて外し、ビルドしなおすと段々参照が治っていきました。
最悪の状態ではSystem の参照さへみつからなくなっていたのでしたが・・・。

色々な参照を削除して、もう一度追加したりしているうちに、なんとかビルドできるようになりました。

さて、次は「アセンブリに署名」できるようにします。
これは経験があるのですが、私の環境ではオレオレ証明書を使用しているせいか、Fodyで単一実行ファイルを作ると、この現象が起きます。


Nugetパッケージマネージャーを確認すると、やはりFodyがインストールされてました。
Custra.Fody、Fodyの順にアンインストール(怒られたので)。
すると、「アセンブリに署名」でビルドできるようになりました。

最後に、いつものILMergeです。
前回、手動でマージするとエラーが表示されることにようやく気付いたので、それで行きました。
まずはやはりプロジェクトに変な文字を使用しているせいか、パスがおかしくなっていました。
それだけでは解決しません。

An exception occurred during merging:
Unresolved assembly reference not allowed: System.Diagnostics.Tracing.
場所 System.Compiler.Ir2md.GetAssemblyRefIndex(AssemblyNode assembly)
場所 System.Compiler.Ir2md.GetTypeRefIndex(TypeNode type)
場所 System.Compiler.Ir2md.VisitReferencedType(TypeNode type)
場所 System.Compiler.Ir2md.GetMemberRefIndex(Member m)
場所 System.Compiler.Ir2md.GetMethodToken(Method m)
場所 System.Compiler.Ir2md.VisitMethodCall(MethodCall c ・・・・・ 」
と表示されます。Unresolved assembly reference not allowed かー。

参照が解決できないとなっていたので、バージョンを変えて試してみます。
開発している.NetFrameworkは、4.8 ですが、ILMergeで指定しているのは、4.6.2だったので、そこを4.8に・・・してもダメでしたが、
4.7.2にすると大丈夫でした。でも・・・今試したら4.8でも通りました。。。。よくわからないが、何とかなりましたね・・・。

もう少しきちんと勉強しようと思います。
※ 今以前の記事を見たら、今回とほぼ同じことが書いてある!!!うー。。。