NuGet包还原未在构建时还原软件包

11

我正在将我们的源代码从Vault迁移到TFS,不需要进行任何迁移,只需在Vault中获取最新版本并添加到TFS中。

该解决方案有几个项目,每个项目都至少有一个NuGet包。我正在尝试使软件包还原再次正常工作。它在Vault中可以使用(但不是应该使用的方式)。我当时有一点时间压力,一开始它没有起作用,所以我添加了一个Pre-Build事件来针对每个项目的packages.config运行nuget.exe。

TFS构建服务抱怨了这个问题,因此我正在尝试让它“正确”地工作。

  1. 我已经在Visual Studio工具菜单中设置了选项。
  2. 我已经安装了NuGetEnablePackageRestore并运行了修复程序。
  3. 我已经验证了软件包目录位于源代码控制中,但为空。
  4. 我已经验证了每个项目文件都包含以下内容:
<RestorePackages>true</RestorePackages>
<Import Project="$(SolutionDir)\.nuget\nuget.targets" />
使用诊断级别的详细度构建后发现每个项目都会评估这些属性,但是nuget.targets中的RestoreCommand从未执行。有什么想法吗?
我尝试实施以下链接中的解决方案: 1.nuget - package restore not working 2.NuGet Package Restore Not Working-我在那里发布了一个问题/评论,请求澄清... 3.http://nuget.codeplex.com/workitem/1879 另外,我发现RestoreCommand属性在构建期间被评估。诊断详细程度显示:
RestoreCommand = (set EnableNuGetPackageRestore=true) && "C:\Source\Kiersted Direct And Related\Direct\Kiersted\.nuget\nuget.exe" install "packages.config" -source "@(PackageSource)" -o "C:\Source\Kiersted Direct And Related\Direct\Kiersted\packages"
2个回答

10

我弄清楚了,并在这里找到答案:MSBuild not running BuildDependsOn tasks from an imported project

问题是在查看诊断详细构建输出后,发现BuildDependsOn设置被取消了。我的项目文件中每个都有导入语句。

<Import Project="$(SolutionDir)\.nuget\nuget.targets" />

但是这个语句位于XML树的开头。显然,Microsoft.CSharp.targets的导入可能会干扰该导入,从而影响BuildDependsOn。

我的解决方案是将nuget.targets的导入移动到Microsoft.CSharp.targets导入的下方。现在一切都顺利地构建了。


1
谢谢提供的信息。然而,我的导入语句已经在 Microsoft.CSharp 导入之后,但我仍然会遇到相同的错误。我将继续深入挖掘并查看发生了什么。 - Dan Csharpster
1
在您的构建输出中,尝试指定诊断。它会输出大量日志,但问题就在其中某个地方。这就是我找到我的问题的方法。 - CodeWarrior
我看到这个警告: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.Common.targets (1605):无法解析此引用。无法找到程序集“MongoDB.Bson”。请确保磁盘上存在该程序集。如果您的代码需要此引用,则可能会出现编译错误。 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.Common.targets (1605):无法解析此引用。无法找到程序集“MongoDB.Driver”。请确保磁盘上存在该程序集。如果您的代码需要此引用,则可能会出现编译错误。 - Dan Csharpster
我认为这是一个提示路径问题,就像这里所指示的那样: http://stackoverflow.com/questions/21620083/appharbor-build-error-with-nuget-packages 但我仍然没有完全解决它。 - Dan Csharpster
是的,这些可能会麻烦。这些警告是在尝试恢复nuGet包之前发生的吗?您是否成功执行了RestoreCommand命令? - CodeWarrior

0

需要考虑其他答案。在我的情况下,Visual Studio决定不自动将packages.config添加到源代码控制中。因此,在Nuget还原期间,该文件未能传递到构建服务器进行考虑。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接