我有一个使用自定义nuget包源的解决方案。现在我在位于我的解决方案文件附近的Nuget.config
文件中指定它们(以便从源代码管理中检出):
|- MySoulution.sln
|- MyProjFolder
|- .nuget
|- Nuget.exe
|- Nuget.config
|- Nuget.targets
从VisualStudio构建解决方案时,此方法很有效。它设法读取此nuget.config
文件并成功恢复所有包。
现在,我正在配置我的解决方案,以便从TeamCity构建。所以我添加了项目配置和构建步骤来构建它。但TeamCity默认情况下不会恢复nuget包。所以我添加了一个单独的Nuget installer
构建步骤,为我的解决方案运行nuget(特定版本)还原。但问题是,它似乎没有从解决方案文件旁边的Nuget.config
文件夹中的.nuget
文件中看到我的自定义nuget包源。
我认为有两种可能的方法可以解决这个问题:
Nuget installer
构建步骤中配置自定义程序包源。Nuget.config
中配置我的自定义程序包源。我不喜欢这种方法,因为他们没有为我提供从TeamCity和VisualStudio构建的单一配置。
总而言之,问题是:我如何配置我的自定义包源,以便从TeamCity和VisualStudio中看到它们,而不需要我在不同的地方多次配置它们?
答案 0 :(得分:1)
如何配置自定义程序包源,以便从TeamCity和VisualStudio中看到它们,而不需要我在不同的地方多次配置它们?
如您所知,如果您不想在不同的地方多次配置自定义nuget源,可以在NuGet.config中设置自定义nuget源并将其添加到源代码管理中。因此,问题的关键在于为什么NuGet不尊重解决方案文件旁边的.nuget文件夹中的Nuget.config文件中的自定义nuget包源。
正如我的评论一样,如果您使用的是NuGet 2.7或更高版本,并且仍然为MSBuild集成还原配置了解决方案,那么您可能在解决方案的.nuget文件夹中安装了较旧版本的nuget.exe。这将导致构建失败,并显示一条错误,指出您尚未同意恢复软件包。 为避免此问题,建议使用MSBuild集成还原迁移任何项目以使用NuGet 2.7及更高版本的自动恢复功能,您可以按照the process进行操作,如下所示:
关闭Visual Studio以避免文件潜在的文件锁定和冲突。
如果使用TFS: 从解决方案的.nuget文件夹中删除nuget.exe和NuGet.targets,并从解决方案工作区中删除这些文件。 使用disableSourceControlIntegration设置保留Nuget.Config,如在使用Team Foundation版本控制省略包中所述。
如果不使用TFS: 从解决方案和解决方案工作区中删除.nuget文件夹。
编辑解决方案中的每个项目文件,删除该元素,并删除对NuGet.targets文件的任何引用。这些设置通常如下所示:
之后,将NuGet.config放在具有自定义NuGet源的解决方案文件旁边:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<solution>
<add key="disableSourceControlIntegration" value="true" />
</solution>
<packageSources>
<add key="CustomSource" value="http://CustomSource/nuget" />
</packageSources>
<packageRestore>
<add key="enabled" value="True" />
</packageRestore>
</configuration>
现在,在NuGet安装程序步骤中,现在有一个“ Package Sources ”字段,您可以填写该字段以让团队城市使用自定义Feed:
您可以参考此文档NuGet Package Restore with TeamCity了解更多详情。
此外,我们还可以在.nuget文件夹中specify custom feed in the NuGet.targets文件(我还没有验证):
<ItemGroup Condition=" '$(PackageSources)' == '' ">
<PackageSource Include="https://nuget.org/api/v2/" />
<PackageSource Include="\\MyShare" />
<PackageSource Include="http://MyServer/" />
</ItemGroup>