NuGet が登場する前は、プロジェクトで使用されるすべての外部 DLL をチェックインすることが「ベスト プラクティス」として広く受け入れられていました。通常、Libs
または3rdParty
ディレクトリにあります。
NuGet を使用する場合、packages
ディレクトリをチェックインする必要がありますか?それとも、MSBuild が nuget フィードから必要なパッケージを自動ダウンロードする方法はありますか?
NuGet が登場する前は、プロジェクトで使用されるすべての外部 DLL をチェックインすることが「ベスト プラクティス」として広く受け入れられていました。通常、Libs
または3rdParty
ディレクトリにあります。
NuGet を使用する場合、packages
ディレクトリをチェックインする必要がありますか?それとも、MSBuild が nuget フィードから必要なパッケージを自動ダウンロードする方法はありますか?
この質問がされたので、パッケージをソース管理にコミットせずに NuGet を使用する簡単なワークフローができました。
パッケージ マネージャー コンソールから、 「NuGetPowerTools」をインストールする必要があります。
Install-Package NuGetPowerTools
次に、プロジェクトがパックの復元をサポートできるようにするには、別のコマンドを実行する必要があります。
Enable-PackageRestore
これで、packages フォルダーなしでコード ベースをコミットする準備が整いました。前のコマンドは、プロジェクト ファイルを変更して、パッケージが見つからない場合に自動的にダウンロードして追加するようにしました。
はい。「packages」ディレクトリは、質問で言及した「libs」ディレクトリと同等であると考えてください。これは、OSS プロジェクトで私が個人的に採用しているアプローチです。
MSBuild が必要なパッケージを自動ダウンロードできるようにする機能を調査していますが、実装されていません (NuGet 1.1 の時点)。
このような機能をすでに独自に実装している人もいると思いますが、NuGet 1.2 または 1.3 にその機能を組み込むことを検討する予定です。
質問をして以来、私は toplovel Packagesディレクトリにチェックインする必要がないように、次のアプローチを取り入れました。
トップレベルの build.msbuild ファイル:
<Target Name="NuGet">
<ItemGroup>
<NuGetPackage Include="*\packages.config" />
</ItemGroup>
<Exec Command='libs\NuGet.exe install "%(NuGetPackage.FullPath)" -o Packages' />
<!-- optional for project that has JavaScript content -->
<CreateItem Include="Packages\*\Content\Scripts\*">
<Output TaskParameter="Include" ItemName="NuGetJSFiles"/>
</CreateItem>
<Copy SourceFiles="@(NuGetJSFiles)" DestinationFolder="MainProj\Scripts\" OverwriteReadOnlyFiles="true" SkipUnchngedFiles="true" />
<Delete Files="MainProj\Scripts\.gitignore" />
<WriteLinesToFile File="MainProj\Scripts\.gitignore" Lines="%(NuGetJSFiles.Filename)%(NuGetJSFiles.Extension)" /
<Delete Files="@(PostNuGetFiles)" />
</Target>
各 project.csproj ファイル内
<Target Name="BeforeBuild">
<Error Condition="!Exists('..\Packages\')" Text="You must run > msbuild build.msbuild to download required NuGet
Packages" />
<!-- optional for project that has JavaScript content -->
<ReadLinesFromFile File="Scripts\.gitignore">
<Output TaskParameter="Lines" ItemName="ReqJSFiles" />
</ReadLinesFromFile>
<Message Text="@(ReqJSFiles)" />
<Error Condition="!Exists('Scripts\%(ReqJSFiles.Identity)')" Text="You must run > msbuild build.msbuild to download required NuGet JS Package - Scripts\%(ReqJSFiles.Identity)" />
</Target>
この質問が最初に投稿されて回答されたときは現実が異なっていたと思いますが、幸いなことに回答は少し変わりました。NuGetを使用して、Pre-Buildイベントを使用してMSBuild経由で依存関係をダウンロードできるようになりました。パッケージフォルダをコードリポジトリに配置する必要はありません。すべての依存関係は、ビルド時にダウンロードおよび/または更新されます。回避策かもしれませんが、十分に適切に見えます。詳細については、次のブログ投稿を参照してください。http: //blog.davidebbo.com/2011/03/using-nuget-without-committing-packages.html
2013 年 9 月 20 日現在、「Nuget Restore」と呼ばれるものがあります。必要に応じて、実際にパッケージ フォルダーをチェックインする必要はありません。(特に DVCS を使用している場合)
これをチェックしてください: Using NuGet without commit packages to source control http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages