11

ASP.NET Web サイト プロジェクト タイプ (適切な .csproj または .vpproj プロジェクト ファイルがなく、ルーズ ファイルの単なるフォルダー) がある場合、NuGet を使用してパッケージを追加すると、*.dll が作成されます。親パッケージ フォルダー内のパッケージの dll を参照するために、Bin ディレクトリ内の .refresh ファイル。

たとえば、パッケージ マネージャー コンソールから「install-package elmah」を実行すると、Elmah はプロジェクトのソリューション ディレクトリの packages フォルダーに配置され、ファイル Elmah.dll.refresh はプロジェクトの Bin フォルダーに配置されます。

プロジェクトをローカルでビルドすると、更新ファイルによって参照される DLL が Visual Studio によって自動的に取り込まれます。サイトと Elmah は正しく動作します。プロジェクトの Bin ディレクトリにある Elmah.dll ファイルをソース管理にチェックインしていません (更新ファイルとパッケージ フォルダーのみがチェックインされています)。

ただし、Web 配置プロジェクトを使用してサイトをプリコンパイルし、配置の web.config 置換を行っています。この方法でソリューションをビルドすると、Elmah.dll が Web サイト プロジェクトの Bin ディレクトリに自動的に取り込まれず、DLL がないためにサイトが正しく動作しません。

NuGet は、この種のシナリオでどのように使用されることを意図していますか? Bin ディレクトリに Elmah.dll をチェックインする必要がありますか?

4

3 に答える 3

11

これは、上記の GC. のソリューションに基づいています。クラス ライブラリ (csproj) を追加し、Web サイト プロジェクトでそのクラス ライブラリを参照します。nuget パッケージをクラス ライブラリに追加します。クラス ライブラリでは、実際にいくつかのクラス ファイルで nuget パッケージを参照します。使い捨てインスタンスか何かを作成するかもしれません。パッケージに含まれる任意のクラスを使用できます。これにより、.dll が Web サイト プロジェクトの Bin ディレクトリに強制的にコピーされます。

于 2013-02-23T17:08:50.117 に答える
5

-- 編集 -- 上記のこのソリューションの更新版を参照してください。

クラス ライブラリ プロジェクトをソリューションに追加し、クラス ライブラリ プロジェクトへの参照を Web サイトに追加するだけです。

次に、Web サイト プロジェクトではなく、クラス ライブラリにナゲットを追加します。

Web サイトがビルドされると、すべてのクラス ライブラリの依存関係が順番に取り込まれます。

于 2012-05-11T11:35:21.367 に答える
0

プリコンパイルは .refresh ファイルを使用して DLL を更新しないと思います - おそらくそれは Visual Studio によって行われます。

それを行う方法が見つからない場合は、DLL を bin フォルダーに手動でコピーするビルド ステップを作成するか、DLL の 2 つのコピーを回避しようとしている場合は、bin フォルダーにチェックインすることができます。パッケージではありません。NuGet.exe を使用してパッケージを再取得し、パッケージ フォルダーにデータを入力できます (こちらこちらを参照) 。

于 2011-05-12T16:51:43.237 に答える