5

今週の初めに、ソリューション内の複数のWebアプリケーション間でファイルを効果的に共有する方法についての質問を投稿しました。NuGetはソリューションとして提供され、しばらくしてソリューションを実装できましたが、現在、解決を妨げている問題が1つあります。

この時点で、2つのWebアプリケーションプロジェクトがあります。

  1. Project.Common.Presentations
  2. Project.Website.Presentations

プロジェクトがビルドされるたびProject.Common.Presentationsに、より高いバージョンの新しいNuGetパッケージが作成されます。このパッケージは私のメインのWebプロジェクトで使用されていますProject.Website.Presentations。最初に、GUIを介してproject.common.presentationsNuGetパッケージをこのプロジェクトに追加します。その直後に、ビルド前のイベントをセットアップし、コマンドラインからNuGetの更新を実行して、Project.Common.Presentationsパッケージの最新バージョンをプルします。

しかし、どういうわけか、コマンドラインでNuGetの更新を使用すると、実際にはディスク上にない場所を使用してプロジェクトへの参照が追加され、次の問題が発生します。

この参照を解決できませんでした。アセンブリ「Project.Common.Presentations」が見つかりませんでした。アセンブリがディスク上に存在することを確認してください。この参照がコードで必要な場合、コンパイルエラーが発生する可能性があります。

これが私が構造を設定する方法です:

  • Project.Common.Presentationsこのファイルを使用して、プロジェクトのNuSpecファイルを生成しました.csproj
  • 私のビルド後のイベントとして、私Project.Common.Presentationsは以下を使用します$(ProjectDir)nuget.exe pack -sym $(ProjectPath)。これにより、プロジェクトがビルドされるたびに新しいNuGetパッケージがビルドされます。このビルドイベントを実行する前に、スクリプトを使用して古いNuGetパッケージを削除します。
  • 私のビルド前のイベントとして、私Project.Website.Presentationsは以下を使用します:$(ProjectDir)NuGet.exe update $(ProjectDir)packages.config

最初の再構築がすべて実行され、.csprojファイルがパッケージへのdll参照で更新され、すべて正常に機能します。2回目にrebuildallを実行すると、.csprojファイルは再度更新されますが、新しいバージョンのパッケージで別のフォルダーを参照していますが、フォルダーがドライブ上にありません。GUIの「NuGetパッケージの管理」を使用してNuGetパッケージを更新すると、この問題は発生せず、すべてが正常に機能します。

ビルド前のイベントを削除し、パッケージを手動で更新すると正常に機能します。しかし、ビルドするたびに手動で何かをしなければならないことは、私が楽しんでいることではありません。パッケージマネージャーコンソールを使用してパッケージをアンインストールおよびインストールすることもできます。パッケージマネージャーコンソールのアクションをビルド前のイベントに組み込む方法はありますか?情報を事前に感謝します。

4

1 に答える 1

2

このような目的でNuGetを使用する基本的な考え方は、ソリューション内のすべてのプロジェクト間で比較的静的な(ほとんど変更されない)アーティファクトを共有することです。私は個人的にNuGetを使用して、共通のマスターページも含めました。すべてのファイルはNuGetコンテンツフォルダーにありました。

私の一般的な機能はすべてライブラリプロジェクトに組み込まれているため、あらゆる種類のビルドスクリプトが不要になりました。

参照:VisualStudioソリューション内の複数のWebアプリケーションプロジェクト

于 2012-06-02T14:44:50.723 に答える