ILMergeは通常、リリースをビルドするときにアセンブリを正常にマージしますが、ClickOnceで公開する場合、結果のEXEにはマージされるはずのDLLが含まれていません。
ILMergeは機能していると思いますが、Publishは新しいマージされたアセンブリを古い元のアセンブリで上書きしています。ilmergeが実行された直後にビルドを停止するビルド後のイベントを作成しましたが、期待どおりにマージされました。
なぜこれが起こっているのですか、そして回避策はありますか?
ClickOnceは、公開を行う前にビルドを実行します。デプロイメントについて何か変更が必要な場合は、ファイルを手動でアセンブルし、MageUIを使用してデプロイメントマニフェスト(.applicationファイル)とアプリケーションマニフェスト(yourapp.exe.manifestファイル)を編集し、ファイルに再署名する必要があります。
どうやら、プロジェクトがビルドされ、ビルド後のスクリプトが実行された後、Publishは出力ファイルをobjディレクトリからbinディレクトリに再コピーします(おそらくマニフェストファイルを変更したためです)。少なくともVisualStudio2010では。
これを修正するには、ilmerge行の後にビルド後のスクリプトにこれを追加します。
ECHOアセンブリをbinからobjディレクトリにコピーします:COPY "$(TargetFileName)" ".... \ obj \ $(ConfigurationName)" COPY "$(TargetFileName)" ".... \ obj \ $(ConfigurationName)"
ファイルをobjディレクトリにコピーして戻し、Publishが適切なファイルで処理できるようにします。