msbuild不恢复fody nuget包

时间:2014-09-16 23:26:07

标签: jenkins visual-studio-2013 msbuild nuget fody

我使用Stamp.Fody nuget包来标记我的.Net程序集。它有Fody作为依赖nuget包。 Jenkin是我们的持续集成服务器。为了构建.Net解决方案,使用MSBuild命令行调用。

在运行msbuild命令行后出现以下错误。

  

“C:\源\ Demo.sln”   (默认目标)(1) - >   “C:\ Source \ Demo.UI.csproj”(默认目标)(2) - >   C:\源\ Demo.UI.csproj(185,5):   错误:此项目引用了缺少的NuGet包   这台电脑。启用NuGet Package Restore以下载它们。对于   更多信息,请参阅http://go.microsoft.com/fwlink/?LinkID=322105。   丢失的文件是.. \ packages \ Fody.1.25.0 \ build \ Fody.targets

使用Visual Studio IDE时,如果缺少Fody或任何其他nuget包,则Visual Studio IDE的包管理器本身会成功恢复所有错过的包。

有趣的是,如果我在删除NUnit,Prism和Fody nuget包并清除Nuget包缓存后运行MSBuild命令行,除了Fody nuget包之外,所有其他包(NUnit和Prism)都已成功恢复。但不是Fody。

根据NuGet Package Restore does not fetch Build Target Assemblies (Tools)参考,我了解到1.13.0.0之前的所有Fody nuget软件包版本存在nuget下载问题。 同样在该链接中建议 我将Fody nuget包引用添加到我的解决方案中的所有项目,并尝试构建解决方案,但它再次完成构建失败。 (我没有安装以前的版本,因此无需从Tools / Fody文件夹中删除任何内容 - 如readme.txt中所述)

我检查了所有其他已知可能的案例,但最终没有成功。

我不知道我在这里缺少什么。有人可以帮我吗?

2 个答案:

答案 0 :(得分:4)

nuget包的推荐方法是使用自动包恢复之前构建而不是在构建期间。与MSBuild一起使用时,您可以在实际构建开始之前使用还原选项(在Nuget 2.7及更高版本中可用),这将下载解决方案使用的所有nuget包。

可在package restore找到更多信息 特别是在MSBuild中包含命令行包恢复的部分

此方法不仅适用于基于Jenkins的CI,也适用于TFS或任何其他CI服务器。 Fody包Simon的作者推荐相同的approach

答案 1 :(得分:2)

根据Jenkins中构建作业的结构,您可以在构建步骤中执行非常简单的批处理。 enter image description here

批处理文件可以是您在构建服务器上与所有作业共享的内容,也可以是项目特定的内容。我倾向于每个项目有一个。

..\.nuget\NuGet.exe Install <your-package-to-restore> -OutputDirectory ..\packages