将包文件夹移动到解决方案文件夹中

Move packages folder inside the solution folder

Visual Studio 2017 / ASP.NET Web 应用程序解决方案。

默认文件夹结构如下:

我想要实现的是将所有内容(包括包)保存在 WebApplication1 文件夹中(WebApplication1.sln 文件除外)。

我知道 NuGet.Config 但不幸的是,似乎必须将此文件放在 .sln 文件旁边。我更愿意将此文件放在 WebApplication1 文件夹中。我想在解决方案文件夹之外有 只有一个 文件:WebApplication1.sln 文件。

I know about NuGet.Config but unfortunately it seems mandatory to place this file next to the .sln file. I would have preferred to place this file inside of WebApplication1 folder. I would like to have ONLY ONE file outside of the solution folder: the WebApplication1.sln file.

我了解您的要求,您只想在解决方案文件夹之外放置 WebApplication1.sln 文件。但是如果你使用 nuget.config 改变包的位置,这个 nuget.config 文件将被放置在解决方案文件夹之外的文件夹中,这不是你想要的。

要解决这个问题,你可以把这个nuget.config文件放在解决方案文件夹外面,没必要把这个文件放在.sln文件旁边,比如你可以把这个C 驱动器根目录中的文件,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <config>
    <add key="repositoryPath" value="C:\Users\<UserName>\source\repos\WebApplication1\WebApplication1\packages" />
  </config>
</configuration>

然后关闭你的 Visual Studio 并删除解决方案文件夹中的包文件夹,重新打开 Visual Studio 并打开你的解决方案,右键单击你的解决方案,select恢复 nuget 包,所有 nuget 包都将放在解决方案文件夹内,解决方案文件夹外的唯一文件是 WebApplication1.sln 文件:

注意:此方法有其自身的局限性,我们必须在 nuget.config 文件中使用绝对路径,此设置对其他解决方案仍然有效。

此外,您可以尝试在项目文件中使用PackageReference而不是packages.config。使用 PackageReference,您的包指向全局包文件夹 C:\Users\<UserName>\.nuget\packages,因此我们不需要添加 nuget.config 文件来更改包文件夹。

要使用 PackageReference,请转到工具->NuGet PackageManager->包管理设置:

希望这对您有所帮助。

我对 visual studio 将包文件夹放在 .sln 旁边但放在 WebApplication1 文件夹之外的原因的理解是,WebApplication1 是 [=11= 中的一个项目] 解决方案。但是一个解决方案可以包含多个项目。在您的情况下,项目名称恰好与解决方案名称相同(由于您在 vs 中创建此项目和解决方案时)。因此,如果您在此解决方案中有多个项目,但想共享一些 nuget 包,那么将 package 文件夹放在项目文件夹之外是有意义的。

这就是我对为什么 vs 具有此默认设置的理解。希望对您有所帮助。