问题 NuGet Package Restore不会在构建时恢复包


我正在将我们的源代码从Vault迁移到TFS,而不是为迁移或其他任何事情烦恼,只需将最新的保险库添加到TFS中即可。

该解决方案有几个项目,每个项目至少有一个NuGet包。我想让Package Restore再次运行。它在Vault中工作(但不是它应该的方式)。我在一个截止日期之前,它起初没有用,所以我添加了一个Pre-Build事件来针对每个项目的packages.config运行nuget.exe。

TFS构建服务抱怨这一点,所以我试图让它正常工作。

  1. 我在Visual Studio工具菜单中设置了选项。
  2. 我已经安装了NuGetEnablePackageRestore并运行修复程序。
  3. 我已经验证package目录是源控件,但是为空。
  4. 我已经验证了每个项目文件都包含以下内容:
<RestorePackages>true</RestorePackages>
<Import Project="$(SolutionDir)\.nuget\nuget.targets" />

具有诊断级别详细程度的构建显示每个项目都会评估这些属性,但nuget.targets中的RestoreCommand永远不会执行。

有什么想法吗?

我试图从这些链接实现解决方案:

  1. nuget - 包恢复无法正常工作
  2. NuGet包还原不起作用   - 我在那里发了一个问题/评论要求澄清......
  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"

8768
2017-11-07 17:33


起源



答案:


我想通了,我在这里找到了答案: MSBuild未从导入的项目运行BuildDependsOn任务

问题(在查看Diagnostic verbosity构建输出之后)是BuildDependsOn设置未设置。我的项目文件都有import语句

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

但该声明是在XML树的开头。显然,Microsoft.CSharp.targets的导入可能会干扰该导入,从而干扰BuildDependsOn。

我的解决方案是将nuget.targets导入移动到Microsoft.CSharp.targets导入下面。现在一切都很美好。


10
2017-11-07 20:06



谢谢(你的)信息。但是,我的import语句已经在Microsoft.CSharp导入之后,我将收到相同的错误。我会继续挖掘,看看这里发生了什么。 - Dan Csharpster
在Build输出中,尝试指定Diagnostic。它输出了大量的日志记录,但问题出在某处。这就是我想出来的方式。 - 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
我认为这是一个提示路径问题,如下所示: stackoverflow.com/questions/21620083/... 但我还没有完全解决它。 - Dan Csharpster
是的,那些可能很麻烦。这些警告是在尝试恢复nuGet包之前发生的吗?你有没有进入RestoreCommand线? - CodeWarrior


答案:


我想通了,我在这里找到了答案: MSBuild未从导入的项目运行BuildDependsOn任务

问题(在查看Diagnostic verbosity构建输出之后)是BuildDependsOn设置未设置。我的项目文件都有import语句

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

但该声明是在XML树的开头。显然,Microsoft.CSharp.targets的导入可能会干扰该导入,从而干扰BuildDependsOn。

我的解决方案是将nuget.targets导入移动到Microsoft.CSharp.targets导入下面。现在一切都很美好。


10
2017-11-07 20:06



谢谢(你的)信息。但是,我的import语句已经在Microsoft.CSharp导入之后,我将收到相同的错误。我会继续挖掘,看看这里发生了什么。 - Dan Csharpster
在Build输出中,尝试指定Diagnostic。它输出了大量的日志记录,但问题出在某处。这就是我想出来的方式。 - 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
我认为这是一个提示路径问题,如下所示: stackoverflow.com/questions/21620083/... 但我还没有完全解决它。 - Dan Csharpster
是的,那些可能很麻烦。这些警告是在尝试恢复nuGet包之前发生的吗?你有没有进入RestoreCommand线? - CodeWarrior


这个答案需要与其他人一起考虑。就我而言,Visual Studio决定不将packages.config自动添加到Source Control中。因此,在Nuget恢复期间,文件没有进入构建服务器以供考虑。


0
2018-04-19 12:41