web-dev-qa-db-ja.com

ILMerge DLL:アセンブリが正しくマージされていませんが、外部参照としてリストされています

.NET C#ツールのビルドプロセスでは、ILMergeを使用してアセンブリを単一のexeにマージしていました。

最近、新しいクラスライブラリを追加しましたが、ILMergeが失敗します。新しいDLLにマージするように指示したことを覚えています。

それは今私にこのエラーを与えています、それは私が本当に理解していません:

ILMerge.Merge:アセンブリ 'DataObjects'が正しくマージされませんでした。これは、ターゲットアセンブリの外部参照として引き続きリストされています。

'project'参照を使用して行ったすべてのアセンブリ参照は、過去に失敗していません。

誰かが私のためにこのエラーを説明できますか、または回避策を提案できますか?

/closed引数を使用する必要がありました。 公式ドキュメント によると:

閉まっている

マージを呼び出す前にこれを設定すると、入力アセンブリの「推移閉包」が計算され、入力アセンブリのリストに追加されます。アセンブリは、最初に指定された入力アセンブリの1つから直接または間接的に参照され、入力アセンブリの1つ、またはそのような参照を持つアセンブリの1つへの外部参照がある場合、推移閉包の一部と見なされます。 。複雑ですが、それは人生です...

すべての出力を単一のアセンブリにマージするWebアプリを公開しようとすると、同様のエラーメッセージが表示されました。

アセンブリのマージ中にエラーが発生しました:ILMerge.Merge:ターゲットアセンブリはそれ自体を外部参照としてリストします。

これは、マージするアセンブリ名がProperties > Applicationの下のWebアプリケーションのアセンブリ名と一致する場合に発生します。出力アセンブリ名を変更すると、修正されるはずです。

6
Hugh Jeffner

公開中に、構成から「マージしない」を選択し、プロジェクトを公開します

0
Suraj Panda

これはまさに@HughJeffnerの画像としての答えです。しばらく時間がかかり、指示を複製しようとする人もいました。

Locations of the fields that should NOT be identical.

0
Paras Parmar

このエラーが発生し、単一のdllにマージしていたMicrosoft.Xrm.Sdk参照を指していました。別の参照であるMicrosoft.Xrm.Sdk.Deploymentをdllにマージするように設定すると、この問題は修正されました。面白いことに、別のプロジェクトで、最初の参照がマージされ、2番目のデプロイメントdllがマージされず、まったく文句が言われませんでした。

0
drzounds