.nu​​getフォルダーをバージョン管理に追加する必要がありますか?


107

NuGetの新しいバージョンでは、NuGetパッケージを自動的に復元するようにプロジェクトを構成して、 packagesフォルダーをソースコードリポジトリに含める必要がないます。良い。

ただし、このコマンドにより新しい.nugetフォルダーが追加され、そこにNuGet.exeというバイナリーがあります。これはVisual Studioによって自動的に再作成することもできるため、バージョン管理に追加するのは正しくありません。ただし、このフォルダーがないと、Visual Studioはソリューションを正しく読み込めません。

あなたはどうやってこれに対処しますか?ソース管理に.nugetを追加しますか?ソリューションを開く前にコマンドラインスクリプトを実行しますか?


これは最も信頼できるリンクdocs.nuget.org/docs/workflows/…であり、古いスレッドであるためです。コメントで情報を共有したいだけです...
Naveed Butt

回答:


47

この投稿は古いので、ソリューションレベルのNuGetパッケージの復元を使用しないでください。バージョン2.7以降では、ビルド時にパッケージを自動的に復元するオプションがNuGetセットアップにあります。したがって、.nugetフォルダーを削除して、オプションをプロジェクトから削除できます。

http://docs.nuget.org/docs/reference/package-restore

更新: NuGet 4.xおよび.NET Standard 2.0のリリースでは、新しいcsproj形式を使用すると、パッケージ参照を使用できるようになりました。皮肉にも、msbuildへの依存関係を再導入してパッケージを復元しますが、パッケージはmsbuildのファーストクラスシチズンです。 。上記のリンクではについても言及してPackageReferenceいますが、次の発表でより詳しく説明しています。

https://blog.nuget.org/20170316/NuGet-now-fully-integrated-into-MSBuild.html

そして、皮肉にもそれほど役に立たないNuGet 4.x RTMの発表:

https://blog.nuget.org/20170308/Announcing-NuGet-4.0-RTM.html

更新2: VS2017では明らかに、従来のcsprojプロジェクトでパッケージ参照を使用することもできますが、下位互換性はなくなり、パッケージのサブ依存関係の復元に問題が発生しました。それはすべて解決されると確信しています。



@CAD Bloke、はい、それは下部のリーディングリストにあります。絞り込んでいただきありがとうございます。
ジェレミー

を使用して、VSでNugetを簡単に更新できますTools > Extensions & Updates > Updates
jocull 2017年

47

@Richard Szalayの答えは正しいです。nuget.exeをコミットする必要はありません。何らかの理由でVisual Studioが自動的にnuget.exeをダウンロードしない場合は、nuget.targetsファイルで次のようにtrueに設定していることを確認してください。

<!-- Download NuGet.exe if it does not already exist --> 
<DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">true</DownloadNuGetExe>

VSソリューションを閉じ、再度開いてビルドします。Visual Studioにより、nuget.exeが自動的にダウンロードされます。


ところで、なぜそれtrueがデフォルトで設定されていないのか誰もが知っていますか?
ajukraine 2013

2
これはプライバシーの問題です。「インターネットを介して要求を行うという単純な行為は、ユーザーに関する情報を明らかにする可能性があります(たとえば、ユーザーのIPアドレスから、ユーザーの場所を概算できます)。」Nugetブログのパッケージの復元と同意に関する記事を
Gan

1
参考:NuGet.exeが.nugetフォルダーに存在しない場合、NuGetパッケージの復元が既に構成されていても、ソリューションのコンテキストメニューに「Enable NuGet Package Restore」が表示されます。ビルド後、オプションはなくなります。
comecme 2013年

これは受け入れられる答えであるはずです、IMO ... NuGet.exeが非常に小さい場合、ソース管理にそれを貼り付けて、無視ファイルで行う必要があることをすべて処理することになるでしょう。しかし、それは1.5メガであり、それは私が常にそれをガンの方法で行うのに十分な大きさです。
Brian MacKay

どこでnuget.exeフォームをダウンロードしますか?ビルドサーバーにインターネットがない場合はどうなりますか?
bitbonk 2017


20

コミットする必要がありますが、コミットする必要はあり.nuget\nuget.targetsませんnuget.exe。exeが存在しない場合は、nuget.targetsでに変更DownloadNuGetExeする限り、ターゲットはexeをダウンロードします。true


4

私は通常、exeをソース管理に追加するという考えは好きではありませんが、プロジェクトを開いてビルドし、実行するために必要なものをソース管理に含めることをお勧めします。

この場合、.nugetフォルダーは必須の依存関係のようです。したがって、ソース管理下にある必要があります。

残っている唯一の問題は、調査する必要があることです。そのフォルダーが読み取り専用としてマークされている場合、NuGetはどのように反応するかです。TFSは、チェックインされたときにそれを行います。


更新: これまでにNuGetを使用したことがないので、もう少し調査を行いました。 http://blog.davidebbo.com/2011/03/using-nuget-without-committing-packages.html

おそらく、あなたがやりたいことは、すべての開発者ワークステーションにインストールする必要があるNuGetを要件にすることです。

さらに、ワークステーションがプロジェクトの編集を開始できるようにするために必要なバッチファイルをソース管理に配置する必要があります。バッチファイルは、依存パッケージを取得してインストールするために必要なコマンドを実行します。

さらに、NuGetに直接連絡して、正確にどのように機能するかを尋ねる場合もあります。


1
<RestorePackages>true</RestorePackages>* .csprojファイルはVisual Studioにとって十分な情報であるはずだと思いましたが、そうではないかもしれません。
Borek Bernard、

1

nugetがパッケージの復元をサポートするようになったので、より詳しく調べます。

私たちはソース管理にSubversionを使用しています。私の最初の考えは.nuget、リポジトリに追加する必要があるということですが、svn:externalsを使用して追加しますして1つの場所を指すように。

これにより、新しいバージョンをすべての開発者とプロジェクトに自動的にプッシュできます。HEADではなくリリースブランチのプロジェクトの場合、nugetをそのままにしておきたい場合は、svn:externals参照のリビジョンを指定できます。

プロジェクトはたくさんあるのでnuget.exe、レポで何度も複製しないことも意味します。


NuGetで外部プロジェクトパッケージを復元できませんでした。これでうまくいきましたか?
Doguhan Uluca '28

はい。ただし、PowershellまたはExtension Pluginが正常に機能している間、NuGet.exeはローカルリポジトリ(IIS 6 + SSL + AD認証)への認証に問題があるようです。
si618、2012

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.