【问题标题】:MSB4044: The "KillProcess" task was not given a value for the required parameter "ImagePath"MSB4044:“KillProcess”任务未为所需参数“ImagePath”指定值
【发布时间】:2021-03-29 06:18:40
【问题描述】:

长话短说,我能够在 Windows 2019 azure 托管代理上成功构建 bitbucket .NET/MVC/Angular 项目,但无法在 ubuntu 代理上成功构建。我想在 ubuntu 上构建它的原因是因为我注意到构建时间比 windows 代理快得多,考虑到平台,这是有道理的。

我正面临这个错误:

Copying file from "/home/vsts/work/1/s/Bobby.ProjectA/obj/Debug/Bobby.ProjectA.pdb" to "/home/vsts/work/1/s/Bobby.ProjectA/bin/Bobby.ProjectA.pdb".
CopyRoslynCompilerFilesToOutputDirectory:
  Creating directory "/bin/roslyn".
  Creating directory "/bin/roslyn".
  Creating directory "/bin/roslyn".
  Creating directory "/bin/roslyn".

/home/vsts/work/1/s/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8/build/net45/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props(17,5): 
warning MSB3021: Unable to copy file "/home/vsts/work/1/s/packages/Microsoft.Net.Compilers.2.4.0/build/../tools/csc.exe" to "/bin/roslyn/csc.exe". Access to the path '/bin/roslyn' is denied. [/home/vsts/work/1/s/Bobby.ProjectA/Bobby.ProjectA.csproj]
"/home/vsts/work/1/s/Bobby.ProjectA/Bobby.ProjectA.csproj" (default target) (1) ->
(KillVBCSCompilerAndRetryCopy target) -> 
/home/vsts/work/1/s/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8/build/net45/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props(23,5): 
error MSB4044: The "KillProcess" task was not given a value for the required parameter "ImagePath". [/home/vsts/work/1/s/Bobby.ProjectA/Bobby.ProjectA.csproj]

根据this 的帖子,问题是因为 VBCSCompiler 正在锁定 src。

所以我已经用尽所有这些解决方案here 来杀死 VBCCompiler,但它们都没有奏效。由于 CI 限制,我也无法在构建期间重新启动 ubuntu 代理,并且在 msbuild 任务之前的killall VBCSCompiler bash 脚本导致此错误:VBCSCompiler: no process found

所以现在我确定这与日志上的最后一条错误消息有关,即error MSB4044: The "KillProcess" task was not given a value for the required parameter "ImagePath".

根据这篇文章here,我需要指定一个图像路径,但由于这是在构建代理上运行的,所以我不能这样做,因为我不能像那个人那样简单地点击错误消息打开Microsoft.codeDom.Providers.DotNetCompilerPlatform.props 文件。

我在项目中找不到这个文件,所以我认为它是在构建过程中创建的......

即使能够指定图像路径,路径是什么? /bin/roslyn?

【问题讨论】:

  • 从您的日志中,您仍在使用旧的软件包版本:Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8。您可以尝试将软件包更新到 2.0.1 或最新版本吗?然后您可以删除 Microsoft.Net.Compilers 参考。以下是关于 pacage 的发布说明:github.com/aspnet/RoslynCodeDomProvider/tags.
  • @KevinLu-MSFT 你能告诉我如何做到这一点,而不必在 Visual Studio 中克隆项目并在那里做吗?我在哪里可以手动更新所有引用?我在bitbucket上的项目中没有看到PROPS文件,那么我会找到哪些文件来更新它?
  • 您可以检查您的项目是否包含类似packages.config 的文件。您可以更改其中的软件包版本。然后你可以找到 xxx.csproj 并在其中更改包引用提示路径。
  • @KevinLu-MSFT 成功了!!!最后!!我什至不必删除Microsoft.Net.Compilers 引用,也不必更新packages.config.csproj 文件中的Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8 版本;所需要的只是删除错误条件:<Error Condition="!Exists('..\packages\Microsoft.Net.Compilers.2.4.0\build\Microsoft.Net.Compilers.props')........ & <Error Condition="!Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8.......... from <Target Name="EnsureNuGetPackageBuildImports"
  • @KevinLu-MSFT 是的!我差点放弃!!我认为肯定是因为该项目不是核心项目,所以它在 linux 上不受支持,但现在它工作了,我们可以将其视为神话!

标签: msbuild azure-pipelines-build-task msbuild-task


【解决方案1】:

终于成功了!我不知道为什么删除这些行可以解决 VBCSCompiler 问题,但是通过这样做,msbuild 在 Ubunutu 20 代理上成功完成!!

.csproj 文件中删除以下行:

<Import Project="..\packages\Microsoft.Net.Compilers.2.4.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.2.4.0\build\Microsoft.Net.Compilers.props')" />

<Error Condition="!Exists('..\packages\Microsoft.Net.Compilers.2.4.0\build\Microsoft.Net.Compilers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Net.Compilers.2.4.0\build\Microsoft.Net.Compilers.props'))" />
<Error Condition="!Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props'))" />

为了给答案提供一些背景信息,这篇文章 here 表明从 MSBuild 集成包还原转换为自动包还原(nuget 还原任务)意味着 Microsoft.Net.Compilers &lt;Import&gt;&lt;Error Condition&gt; sn-ps .csproj 文件中不再相关/不需要。

更新:

在 Windows 代理上运行时,您还需要 remove the following line 以及来自 .csproj 文件

<Import Project="..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" />

在 Windows 代理上构建时解决这些警告:

Warning MSB3030: Could not copy the file "\pagefile.sys" because it was not found.
Warning MSB4181: The "Copy" task returned false but did not log an error.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    • 1970-01-01
    • 2019-01-09
    • 2015-02-14
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    相关资源
    最近更新 更多