MSB4044:"KillProcess" 任务没有为所需参数 "ImagePath" 赋予值
MSB4044: The "KillProcess" task was not given a value for the required parameter "ImagePath"
长话短说,我能够在 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 post,问题是因为 VBCSCompiler 正在锁定 src。
所以我用尽了所有这些解决方案 来杀死 VBCCompiler,但其中 none 有效。由于 CI 限制,我也无法在构建期间重新启动 ubuntu 代理,并且在 msbuild 任务之前的 killall VBCSCompile
r bash 脚本导致此错误:VBCSCompiler: no process found
所以现在我确定这与日志中的最后一条错误消息有关,即 error MSB4044: The "KillProcess" task was not given a value for the required parameter "ImagePath".
根据此 post ,我需要指定一个图像路径,但由于这是 运行 在构建代理上,我不能这样做,因为我可以' 只需像打开 Microsoft.codeDom.Providers.DotNetCompilerPlatform.props
文件那样单击错误消息即可。
我在项目中找不到这个文件,所以我认为它是在构建过程中创建的...
即使我能够指定图像路径,路径又是什么? /bin/roslyn
?
终于成功了!我不知道为什么删除这些行可以解决 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'))" />
为了给答案提供一些上下文,此 post here 表示从 MSBuild 集成包还原转换为自动包还原(nuget 还原任务)意味着 Microsoft.Net.Compilers
<Import>
和 <Error Condition>
片段不再 relevant/needed 在 .csproj
文件中。
更新:
当 运行 在 windows 代理上使用时,您还需要 来自 .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.
我从 .csproj 项目文件中删除了它们并清除了 bin 和 obj 文件夹。现在一切正常。
<Import Project="..\..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.3.6.0\build\net472\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.targets" Condition="Exists('..\..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.3.6.0\build\net472\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.targets')" />
和
<Error Condition="!Exists('..\..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.3.6.0\build\net472\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.3.6.0\build\net472\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.targets'))" />
长话短说,我能够在 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 post,问题是因为 VBCSCompiler 正在锁定 src。
所以我用尽了所有这些解决方案 killall VBCSCompile
r bash 脚本导致此错误:VBCSCompiler: no process found
所以现在我确定这与日志中的最后一条错误消息有关,即 error MSB4044: The "KillProcess" task was not given a value for the required parameter "ImagePath".
根据此 post Microsoft.codeDom.Providers.DotNetCompilerPlatform.props
文件那样单击错误消息即可。
我在项目中找不到这个文件,所以我认为它是在构建过程中创建的...
即使我能够指定图像路径,路径又是什么? /bin/roslyn
?
终于成功了!我不知道为什么删除这些行可以解决 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'))" />
为了给答案提供一些上下文,此 post here 表示从 MSBuild 集成包还原转换为自动包还原(nuget 还原任务)意味着 Microsoft.Net.Compilers
<Import>
和 <Error Condition>
片段不再 relevant/needed 在 .csproj
文件中。
更新:
当 运行 在 windows 代理上使用时,您还需要 .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.
我从 .csproj 项目文件中删除了它们并清除了 bin 和 obj 文件夹。现在一切正常。
<Import Project="..\..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.3.6.0\build\net472\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.targets" Condition="Exists('..\..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.3.6.0\build\net472\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.targets')" />
和
<Error Condition="!Exists('..\..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.3.6.0\build\net472\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.3.6.0\build\net472\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.targets'))" />