gpt4 book ai didi

c# - gitlab CI 运行器 C# 依赖项在 MSbuild 中全部失败

转载 作者:太空宇宙 更新时间:2023-11-03 15:12:12 25 4
gpt4 key购买 nike

我有一个运行器(配置为对 this script 稍作修改),它应该构建并单元测试一个解决方案,其中包含一个 ASP.NET CORE 项目、一个无 JS 的 Web 前端和一个单元测试项目。

但是,当 MSbuild 尝试构建项目时,每个项目中的每个依赖项都会失败(超过 150 条错误消息)并出现错误 NU1001。

这是一些非常奇怪的行为的补充 - 它试图使用 visual studio 2012 进行构建,即使 VS 2012 从未安装在此机器上。它还拒绝接受原始脚本中的 %project_name 参数。我不得不对位置和版本进行硬编码,以使其进入构建阶段。

原始脚本中的 nuget 已被删除,因为它已损坏。后来我发现文档说明 nuget 现在会在构建时自动刷新包,因此不需要重新添加。

最佳答案

我不认为这是一个 gitlab-ci 问题。将你的调试工作集中在与你正在使用的运行器关联的服务器上(或容器内)执行 MSBuild 命令。

我推荐使用 before_script调出一个脚本,该脚本验证您的管道所需的依赖关系。例如,您的预构建脚本可以验证 MSBuild、NuGet 和 Git 是否在您的运行器/VM/容器的路径上(这让您可以使用 Puppet 或 Powershell DSC 控制这些先决条件,而不是在管道内管理它们)。

nuget restore应该作为 restore 的一部分调用阶段而不是 before_script .恢复的包可以作为工件在阶段之间传递。

您在 build 中双引号了对 MSBuild 的调用工作。以下是我在当前使用的管道中调用 MSBuild 的方式:


build_dev:
stage: build
script:
- MSBuild $env:TARGETS /t:Build /p:Configuration=Debug
artifacts:
paths:
- ./*/bin
<<: *default_expiration
<<: *default_tags

在这种情况下,我的 before_script已验证MSBuild在路上,所以我可以自由使用它。它可能指的是 MSBuild 12.0 或 14.0,具体取决于运行程序。 $env:TARGETS来自 gitlab-ci 变量;它指向一个 MSBuild 文件,build.targets .

我相信您使用的是基本的 shell执行人;当您指定 shell = powershell 时,有些事情会变得更容易在您的运行器配置中,Powershell 语法更适合拼接管道。

最后,MSBuild 是否自动恢复 NuGet 依赖项取决于您的 .csproj 方式。文件被写入。我认为最好有 nuget restore作为一个单独的步骤。例如,当您需要还原 MSBuild 本身使用的 Nuget 包时,单独的步骤会派上用场。

通过在命令行中自行运行 MSBuild,验证仅针对您的解决方案文件运行 MSBuild 会自动恢复 NuGet 包。我认为 gitlab-ci 不会影响该命令的成功。

关于c# - gitlab CI 运行器 C# 依赖项在 MSbuild 中全部失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40675178/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com