NuGet Package Restore找不到包,没有Source

Luk*_*ett 28 .net msbuild teamcity nuget

我有一个由TeamCity构建的TeamCity NuGet提要包,但是一个依赖的TC项目在包恢复期间无法看到它.

[14:05:02] [Exec] E:\ TeamCity-BuildAgent\work\62023563850993a7\Web.nuget \nuget.targets(88,9):无法找到"MarkLogicManager40"软件包的版本"1.0.17.0".

[14:05:02] [Exec] E:\ TeamCity-BuildAgent\work\62023563850993a7\Web.nuget \nuget.targets(88,9):error MSB3073:命令""E:\ TeamCity-BuildAgent\work\62023563850993a7\Web.nuget \nuget.exe"install"E:\ TeamCity-BuildAgent\work\62023563850993a7\ProductMvc\packages.config"-source"" - RequestConsent -solutionDir"E:\ TeamCity-BuildAgent\work\62023563850993a7\Web \""退出代码1.

请注意,sourceNuGet命令行中的参数为空.这可能是原因吗?

aba*_*hev 42

截至今天,NuGet.targets有以下方式指定自定义Feed:

<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="\\MyShare" />
    <PackageSource Include="http://MyServer/" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

另一个选择是将NuGet.config放在解决方案文件旁边:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
    <add key="MyShare" value="\\MyShare" />
    <add key="MyServer" value="http://MyServer" />
  </packageSources>
  <activePackageSource>
    <add key="All" value="(Aggregate source)"  />
  </activePackageSource>
</configuration>
Run Code Online (Sandbox Code Playgroud)

  • 谢谢.我不知道你可以提供多个分号分隔的来源.对于未来的读者::: -Source"https://www.nuget.org/api/v2/ ;http://myprivateserver/nuget/" (3认同)
  • 在NuGet安装程序步骤中,现在有一个"包源"字段,您可以填写该字段以让团队城市使用自定义订阅源. (3认同)

Luk*_*ett 9

显然,NuGet自定义源不是通过解决方案或项目文件中的任何内容设置的,或者是解决方案中的nuget.config,而是设置在开发人员配置文件中的nuget.config中.

在TeamCity上,代理不会检查此配置文件或写入它,以确保它包含TeamCity服务器本身的源.

因此,使用自定义TC Feed的TC恢复包不会"正常工作".您必须浪费数百磅的客户资金追逐您的尾巴以发现所有这些,然后将您的配置文件中的nuget.config设置/复制到运行构建代理的用户帐户的配置文件中.

可怕.

  • 要使用签入的源代码使用TeamCity,您可以将自定义包源添加到NuGet.targets文件中.另一种方法是在编译解决方案之前使用自定义NuGet Installer运行器作为构建步骤.不确定为什么忽略NuGet.config文件中的包源可能是因为自定义.targets文件不导入或读取它. (7认同)