Nuget 阻止在解决方案中生成包文件夹

Nuget prevent generating packages folder in solution

我有一个包含两个项目的解决方案。

/Solution
    .sln
    .nuget.config
    /ProjectA
        .csproj
        .nuspec
    /ProejctB
        .csproj
        .nuspec

当我通过 nuget 添加依赖项 ProjectA 时。

项目结构变成了这样:

/Solution
    .sln
    nuget.config
    /packages
         .nupkg
         /lib
             .dll
    /ProjectA
        .csproj
        .nuspec
        packages.config
    /ProejctB
        .csproj
        .nuspec

基本上,Visual Studio 创建一个 packages.config 文件并将依赖项放在那里。并且,依赖项被添加到 /packages 文件夹。此外,.csproj 内容发生了变化。(添加了一个引用,其中包含 /packages 文件夹中 dll 的相对路径。)

我有两个问题。

1- 在 nuget.config 文件中,我放置了以下行。所以我希望 nuget 将使用默认的本地存储库,而不是在解决方案中创建 /packages 文件夹。如何防止在解决方案中创建 /packages 文件夹。相反,我想使用 "%userprofile%\.nuget\packages".

<add key="globalPackagesFolder" value="%userprofile%\.nuget\packages" />

2- 当我将依赖项添加为 nuget 包时。 .csprj 文件仍然被更改,dll 的相关路径被添加在那里作为相对路径的参考。可以吗?自动生成 packages.config 不够。为什么还要更新此文件。

1- Inside nuget.config file I have put following line. So I expect nuget will use default local repository instead of creating a /packages folder in solution. How can I prevent creation of a /packages folder in solution. Instead I would like to use "%userprofile%.nuget\packages".

您应该在 NuGet.Config 中使用以下设置:

 <?xml version="1.0" encoding="utf-8"?>
 <configuration>
   <config>
     <add key="repositoryPath" value="%userprofile%\.nuget\packages" />
   </config>
 </configuration>

您可以从下面的屏幕截图中查看测试结果,软件包已添加到“%userprofile%\.nuget\packages”文件夹中:

注意:注意文件名的大小写,添加后重启VS

2- When I add the dependency as nuget package. Still .csprj file is changed and dll's related path is added there as a reference with relative path. Is it ok? Isn't auto generated packages.config enough. Why also this file is updated.

不是,因为.csproj 文件中的Package.config 和HintPath 具有不同的作用。 Package.config是NuGet用来管理Packages的,.csproj中的HintPath是Visual Studio引用Dll文件的路径。两个文件都需要更新,否则 Visual Studio 会抛出错误 "Can not find the reference..."