向Visual Studio Online添加私有Nuget软件包源

向Visual Studio Online添加私有Nuget软件包源,nuget,azure-devops,build-definition,nuget-package-restore,Nuget,Azure Devops,Build Definition,Nuget Package Restore,我有一个运行的私有NuGet包提要,我使用它在我的项目之间共享某些函数和扩展。它在VisualStudio中工作得很好,但最近我开始在VisualStudio Online上为我的一个项目设置一个持续集成构建,而VSO似乎看不到我的私有提要 我正在使用新的软件包还原方法——在VS选项中设置“允许NuGet下载缺少的软件包”复选框。我没有使用解决方案上下文菜单中的“EnableNuGet Package Restore”选项,因为这实际上是错误的,并且会在其他地方导致问题 我也没有做任何修改我的项

我有一个运行的私有NuGet包提要,我使用它在我的项目之间共享某些函数和扩展。它在VisualStudio中工作得很好,但最近我开始在VisualStudio Online上为我的一个项目设置一个持续集成构建,而VSO似乎看不到我的私有提要

我正在使用新的软件包还原方法——在VS选项中设置“允许NuGet下载缺少的软件包”复选框。我没有使用解决方案上下文菜单中的“EnableNuGet Package Restore”选项,因为这实际上是错误的,并且会在其他地方导致问题

我也没有做任何修改我的项目文件的事情;我正在使用一个自定义的构建定义(使用XAML工作流),这样我就可以通过从构建定义编辑器下的“构建过程模板”下拉列表中选择它来将它应用到我的任何项目中。我这样做是因为我添加了各种其他步骤,包括一些构建后脚本,以便于自动部署到托管服务器;其中一些步骤有点复杂,因此将它们保留在构建过程中意味着我只需设置一次

因此,如果不使用将nuget.exe放入解决方案文件夹的旧上下文菜单解决方案,并且不干扰项目本身,我如何获得VSO的构建以从我的私有提要恢复包

生成工作流模板有一个活动“NuGetRestore”,它可以接受命令行参数。我添加了以下内容:

"-source https://www.nuget.org/api/v2/ http://www.example.com/nuget"

但这似乎没有什么区别。此活动还有一个字段“指定需要恢复其NuGet软件包的解决方案”,我刚刚将其设置为
ProjectsToBuild
变量,该变量在定义构建时设置。我没有从nuget.exe中得到任何错误(至少,我看不到任何错误),但构建失败。有趣的是,它说相关的名称空间不存在,并不是说引用无法解析。有什么想法吗?

我相信您需要做的是添加一个解决方案级别的NuGet.config文件。NuGet配置文件的链接非常类似于web.config。您可以找到文档

NuGet首先从默认位置加载NuGet.config,然后加载从当前驱动器根目录开始并在当前目录中结束的任何名为NuGet.config的文件

它看起来与此类似:

    <?xml version="1.0" encoding="utf-8"?>
<configuration>
    <packageRestore>
        <!-- Allow NuGet to download missing packages -->
        <add key="enabled" value="True" />
        <!-- Automatically check for missing packages during build in Visual Studio -->
        <add key="automatic" value="True" />
    </packageRestore>
    <packageSources>
        <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
        <add key="PrivateNugetName" value="http://your.nuget.server.com/nuget" />
    </packageSources>
    <disabledPackageSources />
    <activePackageSource>
        <add key="All" value="(Aggregate source)" />
    </activePackageSource>
</configuration>

我还注意到您的命令语法错误。nuget还原-源“”。您的源需要用分号分隔。这和我的配置示例应该可以解决这个问题。