如何正确配置 NuGet 包以与 DevOps (TFS) 协作

How to properly configure NuGet Packages for collaboration with DevOps (TFS)

我已阅读并阅读了以下内容:

但我仍然对包含我的解决方案的包的文件夹包有问题,当我签入我的代码时,对我来说一切正常,当其他人获得签入的解决方案时,他必须更改 ProjectNameFile.csproj 中设置的路径,因为那里的路径包含

../../../../NuGetPackages/....

但应该是(并且只有更改为才有效)

../Packages

但是当这个人签入并且我得到这个版本时,我的包文件夹不见了......我们一直在这里的其他项目上使用 TFS,但这对我来说是第一次......

我尝试了我发布的所有建议链接,但没有成功。 工具 > 选项 > NuGet 包管理器如下所示:

我有一个 NuGet.Config 文件,与我的 projectname.sln 文件处于同一级别,其中包含以下内容:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <config>
    <!-- I tried each line below seperately and together -->
    <add key="globalPackagesFolder" value=".\packages" /> 
    <add key="repositoryPath" value="C:\Development\projectname\Packages" />
  </config>
</configuration>

所以我现在所做的是在 projectname.sln 级别上创建了一个 Packages 文件夹,当我构建我的解决方案时,这有效但是嘿,我不能每次 (X) 次都这样做,我相信有一种方法可以实现这一点,但不知道如何实现。

提前感谢您的任何反馈。

How to properly configure NuGet Packages for collaboration with DevOps (TFS)

我想你正在使用 packages.config 作为 nuget 包管理,因为你说“he has to change the path that is set in the ProjectNameFile.csproj because the path there contains ../../../../NuGetPackages/....”。

因此,如果您使用 packages.config,则在使用 Azure DevOps 构建项目时,您应该在 nuget.config 文件中使用 repositoryPath 的相对路径。

我们知道,当我们在Azure DevOps 中构建项目时,Azure DevOps 总是将项目复制到类似D:\a\s\xx 的路径,这与您本地的路径不同。并且 NuGet 始终在 ProjectNameFile.csproj 中使用相对路径(..\packages../../../../NuGetPackages/...),例如:

<Reference Include="packagename, Version=3.0.0.0, xxx">
  <Private>True</Private>
  <HintPath>..\packages\xxx\lib\net45\xxx.dll</HintPath>
</Reference>

在这种情况下,当我们构建项目时,nuget 仍然会将 nuget 包还原到绝对路径 C:\Development\projectname\Packages,但是由于项目的位置已更改为 D:\a\s\xx,因此.csproj文件中HintPath的相对路径也要相应修改,否则nuget找不到对应的dll文件。

所以,我们应该将 repositoryPath 设置为 nuget.config 文件中的相对路径,例如:

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

使用此设置,包文件夹的路径基于文件 nuget.config。只要没有修改nuget.config文件的位置,HintPath不需要修改。

注:

  1. globalPackagesFolder 用于另一种 nuget 管理类型 packagereference.

  2. 如果是和别人一起开发项目,需要统一nuget包的位置,而不是不断地手动修改HintPath。否则会给你的开发带来混乱。

希望对您有所帮助。