我使用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中所述)
我检查了所有其他已知可能的案例,但最终没有成功。
我不知道我在这里缺少什么。有人可以帮我吗?
答案 0 :(得分:4)
nuget包的推荐方法是使用自动包恢复之前构建而不是在构建期间。与MSBuild一起使用时,您可以在实际构建开始之前使用还原选项(在Nuget 2.7及更高版本中可用),这将下载解决方案使用的所有nuget包。
可在package restore找到更多信息 特别是在MSBuild中包含命令行包恢复的部分
此方法不仅适用于基于Jenkins的CI,也适用于TFS或任何其他CI服务器。 Fody包Simon的作者推荐相同的approach
答案 1 :(得分:2)
根据Jenkins中构建作业的结构,您可以在构建步骤中执行非常简单的批处理。
批处理文件可以是您在构建服务器上与所有作业共享的内容,也可以是项目特定的内容。我倾向于每个项目有一个。
..\.nuget\NuGet.exe Install <your-package-to-restore> -OutputDirectory ..\packages