C# 恢复nuget软件包的最佳方法是什么?

C# 恢复nuget软件包的最佳方法是什么?,c#,visual-studio,nuget,nuget-package,nuget-package-restore,C#,Visual Studio,Nuget,Nuget Package,Nuget Package Restore,我有一个使用自定义nuget包源的解决方案。现在,我在位于解决方案文件附近的Nuget.config文件中指定它们(以便从源代码管理中检出): 这在从VisualStudio构建解决方案时非常有效。它设法读取这个nuget.config文件并成功地恢复所有包 现在,我正在配置从TeamCity构建的解决方案。因此,我添加了项目配置和构建步骤来构建它。但是TeamCity默认情况下不会恢复nuget包。因此,我添加了一个单独的Nuget安装程序build步骤,为我的解决方案运行Nuget(特定版本

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

这在从VisualStudio构建解决方案时非常有效。它设法读取这个
nuget.config
文件并成功地恢复所有包

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

我认为有两种可能的方法可以克服这一问题:

  • Nuget安装程序
    build步骤中配置我的自定义包源
  • 在生成计算机上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 integrated restore的任何项目,以使用NuGet 2.7及更高版本的自动还原功能,您可以执行以下操作:

  • 关闭Visual Studio以避免潜在的文件锁定和冲突

  • 如果使用TFS: 从解决方案的.nuget文件夹中删除nuget.exe和nuget.targets,并从解决方案工作区中删除这些文件。 保留NuGue.CONFIG与DababelUrCurrTrimeTrimeGation设置,如用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文件夹中归档(我还没有验证):

    
    
    在解决方案的.nuget文件夹的nuget.config中配置包源。您必须指定nuget使用解决方案文件夹中的nuget.config,默认情况下使用appData中的nuget.config使用“ConfigFile”-选项Visual Studio和nuget的版本是什么?如果您使用的是NuGet 2.7或更高版本,并且有一个仍为MSBuild集成还原配置的解决方案,则该解决方案的.NuGet文件夹中可能有一个旧版本的NuGet.exe。这将导致生成失败,并出现一个错误,表明您未同意恢复包。建议迁移任何使用MSBuild集成还原的项目,以使用NuGet 2.7及更高版本的自动还原功能@Leo MSFT VS15和nuget 4.1.0。迁移到“MSBuild集成还原”意味着根本没有
    .nuget
    文件夹,对吗?如何指定自定义nuget源代码?@D.J.Hmm,看起来是一个很有前途的解决方案。我会试试看
    <?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>
    
    <ItemGroup Condition=" '$(PackageSources)' == '' ">
        <PackageSource Include="https://nuget.org/api/v2/" />
        <PackageSource Include="\\MyShare" />
        <PackageSource Include="http://MyServer/" />
    </ItemGroup>