また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でも通りました。。。。よくわからないが、何とかなりましたね・・・。
もう少しきちんと勉強しようと思います。
※ 今以前の記事を見たら、今回とほぼ同じことが書いてある!!!うー。。。