MSBuild无法还原NuGet程序包

时间:2018-06-28 14:20:14

标签: msbuild nuget-package-restore

我有一个包含多个项目的解决方案,其中一些引用NuGet软件包。有一个网站,但也必须为x86或x64构建服务。该服务是我目前正在尝试构建的。

我们正在参加TFS 2013;对于此特定解决方案,我使用的是Visual Studio 2015。  都选中了“允许NuGet下载丢失的程序包”和“在Visual Studio构建期间自动检查丢失的程序包”。
我正在运行NuGet 3.4.4,我已经更新到4.6.2。

我可以从Visual Studio构建良好。但是服务器上的自动构建失败了。但更重要的是,如果我尝试在本地运行MSBuild,它也会失败。类似于this questionthis one

据我所知,发行模板是正确的版本(12),但是我也不认为这是服务器问题,因为我也不能在本地构建。

这些软件包不在源代码管理中。
解决方案的根文件夹中有一个nuget.config;它以前位于解决方案根目录下的.nuget文件夹中。我没有(也从来没有)在nuget.exe文件夹中有nuget.targetsnuget。这是配置:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <clear />
    <add key="NuGetCache" value="\\BuildServer\NuGetPackages" />
    <add key="NuGetV2" value="https://www.nuget.org/api/v2/" />
  </packageSources>
  <packageRestore>
    <add key="enabled" value="True" />
    <add key="automatic" value="True" />
  </packageRestore>
  <solution>
    <add key="disableSourceControlIntegration" value="true"/>
  </solution>
</configuration>

如果我(手动)清除软件包并运行

MSBuild /p:Configuration=Release;Platform=x64

(从VS2015命令提示符),它失败,因为它找不到所引用的软件包。

根据this answer中的建议,我从项目中删除了EnsureNuGetPackageBuildImports个目标;他们没有RestorePackages标签或nuget.targets的导入。

我尝试添加一个预构建事件来还原软件包(是的,我知道这是“旧的”处理方式)

"C:\Program Files (x86)\NuGet\nuget.exe" restore -ConfigFile "$(SolutionDir)nuget.config" -PackagesDirectory "$(SolutionDir)packages"

...,但是始终失败(“命令以代码1退出”)。如果我从MSBuild输出中复制NuGet命令行并单独执行,则成功。

我注意到一个奇怪的事情:在预构建事件中,NuGet说:“文件夹d:\ path \ to \ solution \ project1 \ bin \ Release-x64不包含msbuild解决方案或packages.config文件,恢复”。我不确定为什么要在输出文件夹中寻找它们。


我确实有解决方法。我们设置了网络共享,以用作程序包缓存。如果我手动编辑项目文件并更改每个引用,以使HintPath指向\\BuildServer\NuGetPackages\而不是..\packages\,则构建将成功。但这是丑陋的,更重要的是,它大大降低了Visual Studio的性能。

0 个答案:

没有答案