1

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

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

"C:\Source\Demo.sln" (默认目标) (1) -> "C:\Source\Demo.UI.csproj" (默认目标) (2) -> C:\Source\Demo.UI.csproj (185,5):错误:此项目引用此计算机上缺少的 NuGet 包。启用 NuGet 包还原以下载它们。有关详细信息,请参阅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)都已成功恢复。但不是福迪。

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

我已经检查了以下所有其他已知可能的情况,但没有成功。

我不知道我在这里错过了什么。有人可以帮我吗?

4

2 回答 2

4

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

更多信息可以在包恢复 中找到,特别是在 MSBuild 中包装的命令行包恢复部分

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

于 2014-09-18T09:49:58.043 回答
2

根据您在 Jenkins 中构建作业的结构,您可以在构建步骤中执行一个非常简单的批处理。在此处输入图像描述

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

..\.nuget\NuGet.exe Install <your-package-to-restore> -OutputDirectory ..\packages
于 2014-09-18T03:37:39.810 回答