.NET C#ツールのビルドプロセスでは、ILMergeを使用してアセンブリを単一のexeにマージしていました。
最近、新しいクラスライブラリを追加しましたが、ILMergeが失敗します。新しいDLLにマージするように指示したことを覚えています。
それは今私にこのエラーを与えています、それは私が本当に理解していません:
ILMerge.Merge:アセンブリ 'DataObjects'が正しくマージされませんでした。これは、ターゲットアセンブリの外部参照として引き続きリストされています。
'project'参照を使用して行ったすべてのアセンブリ参照は、過去に失敗していません。
誰かが私のためにこのエラーを説明できますか、または回避策を提案できますか?
/closed
引数を使用する必要がありました。 公式ドキュメント によると:
閉まっている
マージを呼び出す前にこれを設定すると、入力アセンブリの「推移閉包」が計算され、入力アセンブリのリストに追加されます。アセンブリは、最初に指定された入力アセンブリの1つから直接または間接的に参照され、入力アセンブリの1つ、またはそのような参照を持つアセンブリの1つへの外部参照がある場合、推移閉包の一部と見なされます。 。複雑ですが、それは人生です...
すべての出力を単一のアセンブリにマージするWebアプリを公開しようとすると、同様のエラーメッセージが表示されました。
アセンブリのマージ中にエラーが発生しました:ILMerge.Merge:ターゲットアセンブリはそれ自体を外部参照としてリストします。
これは、マージするアセンブリ名がProperties > Application
の下のWebアプリケーションのアセンブリ名と一致する場合に発生します。出力アセンブリ名を変更すると、修正されるはずです。
公開中に、構成から「マージしない」を選択し、プロジェクトを公開します
このエラーが発生し、単一のdllにマージしていたMicrosoft.Xrm.Sdk参照を指していました。別の参照であるMicrosoft.Xrm.Sdk.Deploymentをdllにマージするように設定すると、この問題は修正されました。面白いことに、別のプロジェクトで、最初の参照がマージされ、2番目のデプロイメントdllがマージされず、まったく文句が言われませんでした。