6

Visual Studio に 5 つのプロジェクトを持つソリューションがあります。彼らです:

  • Foo.Core: コア機能
  • Foo.Api: コアの上に構築された生成コード
  • Foo.Web: Web 固有の拡張機能
  • Foo.Web.Mvc: MVC 固有の拡張機能
  • Newtonsoft.Json: サードパーティ ライブラリ

ILMerge を使用して をマージし、Foo.Coreという単一のアセンブリにします。それは簡単な部分です。Foo.ApiNewtonsoft.JsonFoo

私が直面している問題はFoo.WebFoo.Web.Mvc両方がマージされたアセンブリの 3 つすべてを参照する必要があることです。

元のアセンブリを参照すると、ILMerge の実​​行後に無効な参照が作成されます。

ILMerged アセンブリを参照する場合、デバッグ アセンブリを参照してから、すべてをパッケージ化する前にそれを変更する必要がありますが、これは理想的ではないようです。

Foo3 つのマージされたアセンブリを参照し、独自の出力を ILmerged アセンブリに置き換えるというプロジェクトを作成しようとしましたが、まったく機能していないようです。

これを行う信頼できる方法はありますか?

4

2 に答える 2

3

私はゲームに本当に遅れていることを知っていますが、私たちはまったく同じ問題に苦しんでいました.

まず、マージされていないすべてのプロジェクトまたはサテライト プロジェクトの csproj ファイルを編集して、ファイルの存在に基づく外部アセンブリへの条件付き参照を使用しました。この場合、マージされたアセンブリの存在をテストします。次に、次のことを行うビルド スクリプトを実行しました。

  1. ソリューションをビルドします。
  2. 出力が条件付き参照のファイルであるプライマリ アセンブリで ILMerge を実行します。
  3. ソリューションを再ビルドしますが、今回はマージされたアセンブリが存在するため、マージされていないアセンブリまたはサテライト アセンブリが正しい参照を持つようになります。
于 2011-01-07T04:06:28.720 に答える
2

ILMerge は、ボックス化された「製品」(API、プログラム...) として新しいパッケージ/コンポーネントを作成して、展開、gac 参照、アセンブリの可視性などのアセンブリ管理を簡素化し、オールインワンまたは外部で使用できるように設計されています。混合していません。

私の推測ではPostBuildEvent、メイン アセンブリ/プロジェクト ( Foo.Api?)に a を設定する必要があります。これは、 andプロジェクトで外部アセンブリとして参照されるマージ済みを生成するためPreBuildEventに、Foo.Webandプロジェクトに 1 つまたは a がある場合です。Foo.Web.MvcFooFoo.WebFoo.Web.Mvc

MsBuild タスクを設定することで、これを Visual Studio にさらに統合することができます。サンプル( Stackoverflowから )。

于 2010-05-08T04:59:23.243 に答える