23

NuGetPackageManagerバージョン2.2.31210を使用してVS2012ProfessionalでMVC4Webアプリケーションを構築しています。ソリューションには複数のプロジェクトがあり、すべてNuGetを使用してインストールしたさまざまなパッケージを共有しています。私のプロジェクトの1つは、ブートストラップ、jqueryUIなどのパッケージを使用しているMVC4Webアプリケーションで、すべてNuGetを使用してインストールされています。

ソリューション全体の新しいコピーをリポジトリから複製してMVC4プロジェクトをビルドすると、パッケージの復元機能が機能しているように見えます。ソリューションディレクトリの下にpackagesディレクトリが作成され、期待するパッケージのすべてのバージョンが読み込まれます。見る。ただし、コンテンツファイルはMVCアプリディレクトリの適切な場所にコピーされません。奇妙なことに、コンテンツのディレクトリは作成されますが、コンテンツファイル自体はコピーされません。

たとえば、packages/Twitter.Bootstrap.2.2.2にあるTwitterBootstrapパッケージを使用しています。MVCプロジェクトでは、ブートストラップと呼ばれるディレクトリ(css、img、およびjsディレクトリを含む)がContentディレクトリに作成されます。ただし、cssまたはjsファイルはこれらのディレクトリにコピーされません。

NuGetパッケージディレクトリからこれらのコンテンツファイルをコピーするビルドを取得するために、私が発声しなければならない魔法の呪文の手がかりを誰かが持っていますか?

4

5 に答える 5

13

これは、私たち全員が抱えている非常に一般的な問題です。このトリックを実行する MSBuild タスクNugetContentRestoreTaskを作成しました。パッケージ マネージャー コンソールで次のコマンドを実行します。

Nuget コンテンツのインストール MSBuild ターゲットの復元

    PM> Install-Package MSBuild.NugetContentRestore

BeforeBuild残っている唯一のことは、次のような方法でターゲットから呼び出すことです。

プロジェクト ファイル ターゲット

    <Target Name="BeforeBuild">
      <NugetContentRestoreTask SolutionDir="$(SolutionDir)" ProjectDir="$(ProjectDir)" />
    </Target>

ソース リポジトリを見て、 nuget.orgで見つけることができます。

追加のコンテンツ フォルダ

この nugetには、デフォルトのフォルダー scriptsimagesfonts、およびのみが含まれておりcontent、再帰的なディレクトリには含まれていません。追加のコンテンツ サブフォルダーの場合は、プロパティを割り当てる必要がありますAdditionalFolders

    <Target Name="BeforeBuild">
        <NugetContentRestoreTask SolutionDir="$(SolutionDir)" ProjectDir="$(ProjectDir)" 
              AdditionalFolders="less;sass;common" />
    </Target>
于 2014-09-07T18:33:43.900 に答える
11

回避策を見つけましたが、醜いです。NuGet パッケージ マネージャー コンソールで次のコマンドを実行すると、Update-Package -Reinstallすべてのファイルが実際に Mvc プロジェクトContentおよびScriptsディレクトリ内の適切な場所にコピーされます。

残念ながら、特定のパッケージの間違ったバージョンになってしまう可能性があるため、これは危険です。たとえば、私の場合、コマンドの実行が終了した後 (ちなみにかなり時間がかかります)、最終的に jQuery バージョン 1.4.4 になります。これはかなり古いものであり、更新されている他のパッケージの明示的な依存関係であるに違いないと思います。そのため、NuGet によって実際にパッケージが更新される順序は重要なようです (すべてのパッケージの依存関係ツリー全体を解析し、すべての依存関係の結合から最新バージョンのみを選択するようには見えません。優先される動作)。むしろ、コマンドが実行されると、jQuery パッケージがすべてのパッケージとその依存関係を処理するときに、jQuery パッケージが異なるバージョンに数回置き換えられることがわかります。

同様のアプローチは、Update-Package -Reinstall私の問題を引き起こしているパッケージごとにコマンドを明示的に実行することですが、これは非常に面倒でエラーが発生しやすくなります。

Install-PackageNuGet パッケージの復元機能では、パッケージに対してorコマンドを手動で実行した場合と同じ結果が得られるはずですUpdate-Package -Reinstallが、そうではありません。

于 2013-02-20T15:14:21.390 に答える
4

サードパーティの JavaScript ファイルをソース管理下に置くのも好きではありません。そのため、 http://nuget.codeplex.com/workitem/2094の Jeff Handley のアドバイスに従って、自分で解決策を作成しました。私は実行可能な方法には行きませんでしたが、そのトリックを行う nuget ソリューション レベルのパッケージを作成しました。

http://www.nuget.org/packages/Baseclass.Contrib.Nuget.GitIgnoreContent/

.gitignore ファイルを自動的に更新するため、git に関連付けられています。

簡単な説明:

git の nuget コンテンツ ファイルを無視します。

  • .gitignore ファイルにエントリを生成して、ソース リポジトリから nuget コンテンツ ファイルを除外します

  • ビルド前に nuget コンテンツ ファイルを復元します (VS で自動的に、powershell スクリプトを使用して手動で)

使用方法を説明するブログ記事を書きました。 http://www.baseclass.ch/blog/Lists/Beitrage/Post.aspx?ID=9&mobile=0

于 2014-07-18T08:53:41.860 に答える
3

Visual Studio 2015 Update 1 では、 contentFilesがサポートされるようになりました。これに関する注意点は、project.json を使用するプロジェクトでのみ機能することです。

あなたが抱えている問題に関しては、この動作が見られる理由を説明する良いブログ投稿があります: NuGet Package Restore Common Misconceptions

于 2016-04-15T19:42:39.287 に答える