309

私のプロジェクトのほとんどには、次の規則があります。

/src
    /Solution.sln
    /SolutionFolder
        /Project1
        /Project2
        /etc..
/lib
    /Moq
        moq.dll
        license.txt
    /Yui-Compressor
        yui.compressor.dll
/tools
    /ILMerge
        ilmerge.exe

ソース フォルダーに外部ライブラリを保持していないことに気付くでしょう。NuGet の使用にも非常に興味がありますが、これらの外部ライブラリをソース フォルダー内に置きたくありません。NuGet には、すべてのパッケージが読み込まれるディレクトリを変更する設定がありますか?

4

17 に答える 17

254

パッケージをインストールするフォルダを制御できるようになりました。

http://nuget.codeplex.com/workitem/215

編集: 2010年12月10日午後11時45分に関するPhil Haackのコメントを参照してください(作業項目/上記のリンク内)。サポートは1.0で部分的に実装されていますが、文書化されていません。

@dfowlerによると:次のようにソリューションの横にnuget.configファイルを追加します。

<settings>
<repositoryPath>{some path here}</repositoryPath>
</settings>

パッケージフォルダのオーバーライドを作成するためのnugetパッケージがあります。

バージョン2.1のアップデート

Azatがコメントしたように、パッケージの場所を制御する方法に関する公式ドキュメントがあります。2.1のリリースノートでは、nuget.configファイルで次の構成を指定しています(構成ファイルを配置する有効な場所の説明と階層構成モデルの動作については、リリースノートを参照してください)。

<configuration>
  <config>
    <add key="repositoryPath" value="C:\thePathToMyPackagesFolder" />
  </config>
  ... 
</configuration>

これにより、ファイルを配置した構成レベルのパッケージフォルダーが変更されます(ソリューションディレクトリに配置した場合はソリューション、プロジェクトディレクトリにプロジェクトを配置した場合など)。リリースノートには次のように記載されていることに注意してください。

[...]ソリューションルートの下に既存のパッケージフォルダーがある場合、NuGetがパッケージを新しい場所に配置する前に、そのフォルダーを削除する必要があります。

于 2010-11-16T17:44:02.143 に答える
65
  1. 「nuget.config」というファイルを作成しました。
  2. そのファイルをソリューションフォルダーに追加しました

これは私にとってはうまくいきませんでした:

<configuration>
  <config>
    <add key="repositoryPath" value="..\ExtLibs\Packages" />
  </config>
  ... 
</configuration>

これは私にとってはうまくいきました:

<?xml version="1.0" encoding="utf-8"?>
<settings>
  <repositoryPath>..\ExtLibs\Packages</repositoryPath>
</settings>
于 2012-11-28T07:37:32.213 に答える
43

この投稿を読んでいる他の人のためにわかりました-上記の無数の回答について私が理解していることは次のとおりです。

  1. .nu​​get フォルダー内の nuget.config ファイルは、そのフォルダーに対して相対的です。新しいフォルダーが「../Packages」のようなものである場合、常に箱から出してすぐに配置されるため、これは重要です。@ bruce14が述べているように、代わりに「../../Packages」を実行する必要があります

  2. パッケージの復元を有効にしないと、最新の nuget (2.8.5) を取得して、標準の場所以外のパッケージ フォルダーを見つけることができませんでした。したがって、パッケージの復元を有効にしたら、.nuget フォルダー内の nuget.config ファイルに以下を追加して、場所を変更する必要があります。

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      ...
      <config>
        <add key="repositoryPath" value="..\..\Packages" />
      </config>
      ...
    </configuration>
    
  3. (これは重要です) nuget.config ファイル内のパッケージ フォルダーの場所に変更を加えた場合は、変更を有効にするために Visual Studio を再起動するか、ソリューションを閉じて再読み込みする必要があります。

于 2014-08-20T23:24:23.230 に答える
26

Visual Studio 2015 での Nuget 3.2 のソリューションは次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <config>
        <add key="repositoryPath" value="../lib" />
    </config>
</configuration>

親フォルダーにスラッシュを使用します。上記のファイル (nuget.config) をソリューション フォルダーに保存します。

参考資料はこちら

于 2015-10-14T13:50:19.240 に答える
12

Shane Kms の回答に加えて、Nuget Package Restore を有効にした場合は、.nuget-folder にある NuGet.config を次のように編集します。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <repositoryPath>..\..\ExtLibs\Packages</repositoryPath>
</configuration>

ソリューション フォルダーではなく .nuget-folder からバックトラックするため、余分な "..\" に注意してください。

于 2013-09-25T12:37:27.990 に答える
11

いくつかのヒントが欠けているため、この回答はどれも私にとってはうまくいきませんでした(Nuget 2.8.6)。他の人にとって役立つかもしれないので、ここに追加しようとします。

次のソースを読んだ後 :
https://docs.nuget.org/consume/NuGet-Config-Settings
https://github.com/NuGet/Home/issues/1346

  1. Install-Package を別の repositoryPath で適切に機能させるには、スラッシュを使用する必要があります。これは、Uri オブジェクトを使用して場所を解析しているためです。
  2. 最初に$がなければ、私の設定はまだ無視されていました。
  3. NuGet は構成ファイルをキャッシュするため、変更後にソリューション/VS をリロードする必要があります。
  4. NuGet.exe のコマンドを使用してこのオプションを設定しているときに、AppData\Roaming\NuGet の下のグローバル NuGet.exe を変更し、そこでパッケージの復元を開始したときに、奇妙な問題も発生しました (そのファイルの優先度が高いため、推測するだけです)。

例えば

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <solution>
    <add key="disableSourceControlIntegration" value="true" />
  </solution>
  <config>
    <add key="repositorypath" value="$/../../../Common/packages" />
  </config>
</configuration>

NuGet コマンドを使用して、次のように構文が正しいことを確認することもできます。

NuGet.exe config -Set repositoryPath=$/../../../Common/packages -ConfigFile NuGet.Config
于 2015-11-12T13:06:09.657 に答える
5

VS 2017 の更新:

Nuget チームのメンバーは最終的に Nuget を自分で使い始めたようで、いくつかの重要なことを見つけて修正するのに役立ちました。だから今(まだVS 2017に移行していないので、私が間違っていなければ)、以下はもう必要ありません。「repositoryPath」をローカルフォルダーに設定できるはずで、機能します。デフォルトでは、復元場所がソリューション フォルダーからマシン レベルに移動されるため、そのままにしておくこともできます。繰り返しますが、まだ自分でテストしていません

VS 2015 以前

他の回答へのヒント(特にこれ):

NuGet パッケージ フォルダーの場所は構成によって変更できますが、VisualStudio は引き続きこのフォルダー内のアセンブリを相対的に参照します。

<HintPath>..\..\..\..\..\..\SomeAssembly\lib\net45\SomeAssembly.dll</HintPath>

これを回避するために (より良い解決策が得られるまで)、substコマンドを使用して、Packages フォルダーの新しい場所を指す仮想ドライブを作成しました。

subst N: C:\Development\NuGet\Packages

新しい NuGet パッケージを追加するとき、プロジェクト参照はその絶対的な場所を使用します。

<HintPath>N:\SomeAssembly\lib\net45\SomeAssembly.dll</HintPath>

ノート:

  1. このような仮想ドライブは再起動後に削除されるため、必ず処理してください
  2. プロジェクト ファイル内の既存の参照を置き換えることを忘れないでください。
于 2015-10-19T10:51:57.553 に答える
5

最も一貫した方法はnuget config、config を明示的に設定するために使用することです。

nuget config -set repositoryPath=c:\packages -configfile c:\my.config

https://docs.microsoft.com/en-us/nuget/consume-packages/configuring-nuget-behavior#changeing-config-settings

于 2017-08-28T18:57:22.060 に答える
4

Nuget 2.8.3 で更新するだけです。インストールされたパッケージの場所を変更するために、ソリューションを右クリックしてパッケージの復元を有効にしました。NuGet.Config を編集し、次の行を追加しました。

  <config>
    <add key="repositorypath" value="..\Core\Packages" />
  </config>

次に、ソリューションを再構築すると、すべてのパッケージが目的のフォルダーにダウンロードされ、参照が自動的に更新されました。

于 2014-11-09T06:09:34.630 に答える
2
  1. nuget.config次の内容で、ソリューション ファイルと同じディレクトリに作成します。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <config>
    <add key="repositoryPath" value="packages" />
  </config>
</configuration>

'packages'すべてのパッケージが復元されるフォルダーになります。

  1. Visual Studio ソリューションを閉じて、もう一度開きます。
于 2020-10-21T17:20:31.480 に答える