配置Nuget.Config以在VS2013和VS2017中工作

时间:2017-04-10 15:46:04

标签: c# visual-studio-2013 nuget visual-studio-2017

以下是我目前在VS2013中运行的nuget.config。

我希望转移到VS2017,但我需要对nuget.config文件进行更改才能执行此操作。

无论如何我可以编写我的nuget.config以便它可以在VS2013或VS2017中工作吗?

我问的原因是因为并非所有开发人员都在使用相同版本的visual studio,当我检查使用nuget所需的更改时,对于那些在VS2013中加载解决方案的人来说,这将会中断。

<!-- VS2013 -->

<?xml version="1.0" encoding="utf-8"?>
<settings>
  <repositoryPath>..\lib</repositoryPath>
</settings>


<!-- VS2017 -->

<configuration>
 <config>
     <add key="repositoryPath" value="..\lib" />
     </config>
     <packageRestore>
     <add key="enabled" value="True" />
     </packageRestore>
 </configuration>

2 个答案:

答案 0 :(得分:0)

我的建议是更新您拥有的最新版本的nuget版本,然后在您团队的所有可视工作室中添加一个nuget存储库以指向相同的文件夹位置。

enter image description here

至少你需要了解的是,如果你的一个开发人员(团队A)使用2013版本删除了一个包,那么开发人员(团队B)使用2017就不会有任何问题,因为当Nuget认可你之后获取最新版本的存储库文件夹,包文件夹上没有文件夹,因为它根据已安装的package.config进行识别,哪些不存在,那么您应该再次获得依赖项,将其作为新的更改提交给您源代码控制工具,之后第二个项目将指向正确的引用,并且您的团队A不会将其作为其依赖项的一部分包含在内。

第二种方法:您可以使用最新配置(NuGet.Config文件)转到您的vs2013项目并更新对新存储库的所有引用,这应该可以正常工作

以下是我需要从头开始配置NuGet时的步骤

NUGET CONFIGURATION: 该方法是统一并减少所有项目的重复依赖关系,并将它们放在每个项目都可以使用它的公共位置。优点不仅仅是统一依赖关系;它还减少了TFS上的空间,并为自动构建保留了分层结构。

第1步:Nuget包的公共文件夹

enter image description here

首先,您需要在所有项目的根级别创建Common文件夹,其中包含Packages文件夹。如果您希望将其他项目中的所有.NuGet包添加到后一个文件夹,或者在包含新依赖项时将其保留到Visual Studio,请随意手动复制。 Common将作为Nuget存储库工作,但在本例中作为本地Nuget。库。您的Visual Studio配置应该知道。按照下一步

enter image description here

然后你需要使用加号按钮创建一个新的种子库(你的本地)。我在下面命名:包。之后浏览新包的文件夹。然后单击“确定”

enter image description here

现在,您可以转到项目并右键单击以包含新的依赖项 enter image description here

然后转到package source并选择Packages,你会看到Packages文件夹中第一次应该为空的所有可用包

enter image description here

这里的想法是从Packages文件夹而不是从Nuget存储库下载我们需要的软件包,如果软件包不存在则更改为搜索到nuget.org选项并从那里下载软件包。效果应该相同

第2步:准备配置文件

这里我们要避免Nuget将包保存在项目根目录下的“packages”文件夹中,这是下载包时nuget的默认行为。

enter image description here

enter image description here

而是我们要将软件包下载到Common / Package文件夹。为此,我们需要在结构中添加Nuget.config文件。在项目的根目录中创建NuGet.Config文件。 TFS视图

enter image description here

enter image description here

NuGet.Config类型

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

对于repositoryPath设置,您可以使用$ token指定绝对路径或相对路径(推荐)。 $ token基于NuGet.Config所在的位置($ token实际上相对于NuGet.Config位置以下的一个级别)。所以,如果我有\ Team Project \ NuGet.Config,我想要\ Team Project \ Common \ Packages,我需要指定$ .. \ Common \ Packages作为值。

第3步:最后一步。

开始下载软件包并确保签入所有更改。 如果您在项目的根目录中有一个包文件夹,则可以将其删除,以防您想要设置对新文件夹的正确引用。如果这是您想要的,请随意删除它。但是,如果您希望保留遗留代码指向包并开始使用新的Common文件夹以用于将来的包,那么您需要保留两者。 下面我修复了所有引用,没有“package”文件夹,仍然可以包含新的包。

enter image description here

享受!!!

答案 1 :(得分:-1)

很抱歉告诉你这是不可能的。这是一个突破性的变化,以适应.Net Core和其他版本的VS(即VS for Mac)。在查看vs 2017 RC和.net核心工具预览时,我偶然发现了这些信息。