繁体   English   中英

恢复nuget包的最佳方法是什么?

[英]What is the best way to restore nuget packages?

我有一个使用自定义nuget包源的解决方案。 现在,我在解决方案文件附近的Nuget.config文件中指定它们(以便从源代码管理中检出):

|- MySoulution.sln
|- MyProjFolder
|- .nuget
   |- Nuget.exe
   |- Nuget.config
   |- Nuget.targets

从VisualStudio构建解决方案时,此方法效果很好。 它设法读取此nuget.config文件并成功还原所有软件包。

现在,我正在配置要从TeamCity构建的解决方案。 因此,我添加了项目配置和构建步骤。 但是,TeamCity不会默认还原nuget软件包。 因此,我为解决方案添加了一个单独的Nuget installer构建步骤,该步骤运行nuget(特定版本)还原。 但是问题是,似乎没有从解决方案文件旁边的.nuget文件夹中的Nuget.config文件中看到我的自定义nuget包源。

我看到两种可能的方法来克服此问题:

  1. Nuget installer构建步骤中配置我的自定义软件包源。
  2. 在构建计算机上AppData文件夹中的Nuget.config中配置我的自定义程序包源。

我不喜欢这两种方法,因为它们没有为我提供从TeamCity和VisualStudio进行构建的单一配置。

总而言之,问题是:如何配置自定义程序包源,以便它们在TeamCity和VisualStudio中都可见,而无需我在不同位置进行多次配置?

如何配置我的自定义程序包源,以使它们在TeamCity和VisualStudio中都可见,而无需在不同位置进行多次配置?

如您所知,如果您不想在不同位置多次配置自定义nuget源,则可以在NuGet.config中设置自定义nuget源,并将其添加到源代码控制中。 因此,解决问题的关键是为什么NuGet不尊重解决方案文件旁边.nuget文件夹中Nuget.config文件中的自定义nuget包源。

就像我的评论一样,如果您使用的是NuGet 2.7或更高版本,并且仍为MSBuild集成还原配置了解决方案,则解决方案的.nuget文件夹中可能具有nuget.exe的较旧版本。 这将导致构建失败,并显示一条错误,指出您未同意还原软件包。 为避免此问题,建议使用MSBuild集成还原迁移任何项目,以使用NuGet 2.7及更高版本的自动还原功能,您可以按照以下过程进行操作:

  1. 关闭Visual Studio,以避免潜在的文件锁定和冲突。

  2. 如果使用TFS:从解决方案的.nuget文件夹中删除nuget.exe和NuGet.targets,然后从解决方案工作区中删除这些文件。 如禁用Team Foundation版本控制程序中所述,使用disableSourceControlIntegration设置保留Nuget.Config。

  3. 如果不使用TFS:从解决方案和解决方案工作区中删除.nuget文件夹。

  4. 编辑解决方案中的每个项目文件,删除元素,并删除对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 Installer步骤中,现在有一个“ Package Sources ”字段,您可以填写以使Team City使用自定义提要:

在此处输入图片说明

您可以参考此文档使用TeamCity还原NuGet软件包以获取更多详细信息。

此外,我们还可以在.nuget文件夹中的NuGet.targets文件中指定自定义供稿 (我尚未验证):

<ItemGroup Condition=" '$(PackageSources)' == '' ">
    <PackageSource Include="https://nuget.org/api/v2/" />
    <PackageSource Include="\\MyShare" />
    <PackageSource Include="http://MyServer/" />
</ItemGroup>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM