我使用 Teamcity(在 Internet 的虚拟机上运行)创建了一个 Nuget 服务器,并创建了将包发布到其中的构建。
我还有另一个项目需要使用该包。这个项目也是建立在 teamcity 之上的。在我本地的 Visual Studio 上,我添加了 nuget feed uri,安装了包,一切正常。但是当我尝试在 teamcity 上构建它时,它会说“找不到包”。
所以我的问题是:“如何将自定义 nuget 提要添加到 TeamCity 构建中?”
NuGet 包源是通过 Visual Studio 配置的,但它们存储在每个用户的配置文件中,位于c:\Users\$USER\AppData\Roaming\NuGet\NuGet.config
. TeamCity 包源的条目需要添加到运行构建的构建代理用户的配置文件中。
编辑: ladenedge 记录了我最初回答这个问题时不存在的一个很好的解决方案。如果您没有对构建代理的管理员访问权限或想要基于每个项目配置包源,则该解决方案特别有用。
NuGet.targets
NuGet 现在可以从与源本身一起存储的文件中读取源,如对重复问题的回答中所述。
<ItemGroup Condition=" '$(PackageSources)' == '' ">
<!-- Package sources used to restore packages. By default, registered sources under %APPDATA%\NuGet\NuGet.Config will be used -->
<!-- The official NuGet package source (https://nuget.org/api/v2/) will be excluded if package sources are specified and it does not appear in the list -->
<PackageSource Include="https://nuget.org/api/v2/" />
<PackageSource Include="https://my-nuget-source/nuget/" />
</ItemGroup>
我不想在源代码中的NuGet.config中添加提要,因为这是构建基础架构的一部分,而不是应用程序代码的一部分。
我也不想在 TeamCity 构建代理上的NuGet.config中添加提要,因为它很难维护(更新、添加、删除),而且我们有很多构建代理。
什么对我最有效 -在包含全局 nuget 提要和我的自定义(分号分隔)的 TeamCity(在根项目上)中添加%system.PackageSources% :
https://www.nuget.org/api/v2/;http://<teamcity_server_name>:81/guestAuth/app/nuget/v1/FeedService.svc
如果您查看NuGet.Targets,您会发现它使用 $(PackageSources) (如果已定义)。因此,您将其定义为 TeamCity 中的“系统”参数,并将其传递给构建过程。