如何正确配置 NuGet 包以与 DevOps (TFS) 协作
How to properly configure NuGet Packages for collaboration with DevOps (TFS)
我已阅读并阅读了以下内容:
- https://docs.microsoft.com/en-us/nuget/consume-packages/package-restore#enabling-and-disabling-package-restore
- https://docs.microsoft.com/en-us/nuget/consume-packages/package-restore-troubleshooting
- Why is there no packages folder in .my NET Core solution's containing folder?
- 'nuget' is not recognized but other nuget commands working
- https://www.skylinetechnologies.com/Blog/Skyline-Blog/July_2016/Relocate_NuGet_Package_Restore_Folder
但我仍然对包含我的解决方案的包的文件夹包有问题,当我签入我的代码时,对我来说一切正常,当其他人获得签入的解决方案时,他必须更改 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
不需要修改。
注:
globalPackagesFolder
用于另一种 nuget 管理类型 packagereference
.
如果是和别人一起开发项目,需要统一nuget包的位置,而不是不断地手动修改HintPath
。否则会给你的开发带来混乱。
希望对您有所帮助。
我已阅读并阅读了以下内容:
- https://docs.microsoft.com/en-us/nuget/consume-packages/package-restore#enabling-and-disabling-package-restore
- https://docs.microsoft.com/en-us/nuget/consume-packages/package-restore-troubleshooting
- Why is there no packages folder in .my NET Core solution's containing folder?
- 'nuget' is not recognized but other nuget commands working
- https://www.skylinetechnologies.com/Blog/Skyline-Blog/July_2016/Relocate_NuGet_Package_Restore_Folder
但我仍然对包含我的解决方案的包的文件夹包有问题,当我签入我的代码时,对我来说一切正常,当其他人获得签入的解决方案时,他必须更改 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
不需要修改。
注:
globalPackagesFolder
用于另一种 nuget 管理类型packagereference
.如果是和别人一起开发项目,需要统一nuget包的位置,而不是不断地手动修改
HintPath
。否则会给你的开发带来混乱。
希望对您有所帮助。