2

現在のプロジェクトで DAL を作成しましたが、これは持続性を無視し、直接参照する必要があるコントラクト dll と、関連する ORM 固有の実装とマッピングを解決するために IoC コンテナーによってスキャンされることを意図した実装 dll があります。コントラクト dll で定義されたインターフェイスと POC。私の望みは、実装 DLL を [ソリューション ルート]\lib ディレクトリにコピーすることです。パッケージを作成し、実装 DLL をコンテンツ フォルダーにロードしました。パッケージをインストールすると、[プロジェクト ルート]\lib に配置されます。

私の質問は、Nuget で実装 dll を [ソリューション ルート]\lib にコピーするにはどうすればよいですか?

4

2 に答える 2

0

私はそれがうまくいくように見える1つのアプローチを見つけました。

  1. Nugetパッケージのコンテンツフォルダーで、スキャンするdllを一時フォルダーに配置します。
  2. ソリューションごとに1回だけ実行されるInit.ps1スクリプトを、Nugetパッケージのツールフォルダー(http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package)に追加します。このスクリプトでは、ファイルを目的のディレクトリにコピーします[solution dir]\lib
  3. Install.ps1ファイルをtoolsフォルダーに追加します。このファイルは、インストールされたプロジェクトごとに1回実行され、一時フォルダーが削除されます。

次に、dalパッケージに依存するコンテナ登録用の別のパッケージを作成し、同様のアプローチを使用してIoC登録を設定できます。だから私は持っているだろう

Company.Dal
Company.Dal.Ninject
Company.Dal.StructureMap

次に、コンシューマーは、使用するのと同じコンテナーを使用するパッケージをインストールします。これにより、必要なdllがインストールされ、[solution dir]\libこれらのdllを使用するようにコンテナーが構成されます。

長所

  1. それは仕事を成し遂げるでしょう。

短所

  1. インストールされているすべてのプロジェクトにdllをコピーしてから、それらを削除する必要があります
  2. Init.ps1は、ソリューションが開かれるたびにも実行されます

@MrMVCManを編集 し、先に進んで、これをどのように行ったかを文書化したブログ投稿を作成しました:http ://www.ryanvice.net/nuget/creating-a-nuget-package-that-will-install-files-relative-to -ソリューション/

于 2012-07-04T09:52:31.053 に答える
0

あなたの問題を解決する一般的なナゲットパッケージを作成しましたが、アプローチは異なります。パッケージを lib フォルダーにコピーする代わりに、ビルド時にパッケージをビルド出力フォルダーにコピーします。

nuspec ファイルは次のようになります。

<files>
    <file src="output\Implementation.dll" target="output\Implementation.dll" />
    <file src="lib\Implementation.Contract.dll" target="output\Implementation.Contract.dll" />
</files>

この nuget パッケージをプロジェクトに追加すると、Implementation.Contract.dll がプロジェクトへの参照として追加されますが、実装はプロジェクトに追加されません。

完全な例については、http://www.baseclass.ch/blog/Lists/Beitrage/Post.aspx?ID=6&mobile=0 の私のブログを 参照してください。

于 2014-07-18T08:32:34.197 に答える