【问题标题】:CAKE throws error claiming argument was not set, even though it wasCAKE 抛出错误声明参数未设置,即使它是
【发布时间】:2017-08-22 22:34:56
【问题描述】:

我正在使用 Cake 0.21.1.0。

对于我的项目,作为 TeamCity 上的构建步骤,我执行 build.ps1,然后调用 build.cake。根据the CAKE documentation,我将以下参数传递给我的build.ps1 脚本:

-ScriptArgs '-MSBuildLogger="JetBrains.BuildServer.MSBuildLoggers.MSBuildLogger,%teamcity.dotnet.msbuild.extensions4.0%"'

build.cake 中,我添加了以下行:

var msBuildLogger = Argument<string>("MSBuildLogger");

但是,抛出了以下错误:

[15:37:22]Error: Argument 'MSBuildLogger' was not set.
[15:37:22]Process exited with code 1

我做错了什么?

【问题讨论】:

  • 如果你尝试会发生什么:var msBuildLogger = Argument("MSBuildLogger", "bob");
  • @GaryEwanPark 我看到以下日志:“[16:03:46]MSBUILD:错误 MSB1021:无法创建记录器的实例。无法加载文件或程序集“bob”或其之一依赖项。系统找不到指定的文件。[16:03:46]切换:bob [16:03:46]执行任务'Build'时出错。”

标签: continuous-integration teamcity cakebuild


【解决方案1】:

试试下面的build.cake文件:

var logger = Argument<string>("MSBuildLogger");

Task("Default")
  .Does(() =>
{
  Information(logger);
});

RunTarget("Default");

另外,使用以下命令从 resources repository 获取最新的引导程序文件:

Invoke-WebRequest https://cakebuild.net/download/bootstrapper/windows -OutFile build.ps1

然后运行以下命令:

.\build.ps1 -ScriptArgs '-MSBuildLogger="JetBrains.BuildServer.MSBuildLoggers.MSBuildLogger,%teamcity.dotnet.msbuild.extensions4.0%"'

确认在本地运行脚本时得到正确的输出。即把 TeamCity 排除在外。

【讨论】:

  • 我在本地运行时看到相同的错误消息:“错误:未设置参数'MSBuildLogger'。”我正在使用 Cake 0.21.1.0。
  • 所以,为了确认,使用如上所示的示例脚本(即没有别的),使用上面显示的确切命令,您会收到该错误消息吗?
  • 当我明确添加“MsBuildLogger”作为 PowerShell 参数然后将参数传递给 CAKE 时,它实际上可以工作。但根据文档,正确的做法是使用-ScriptArgs
  • 是的,我的 build.ps1 脚​​本基于引导程序。
  • 这结束了我早上试图从 MSBuild 获得更好的输出到 TeamCity 的痛苦(而不是全部埋在构建日志中)。我不得不做一些细微的改变,因为那个论点对我来说并没有逐字地起作用。我只需要 dll 路径:--tcLogger="%teamcity.dotnet.msbuild.extensions4.0%"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-19
  • 2015-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多