如何在 Ubuntu 特工上杀死 VBCSCompiler.exe?
How to kill VBCSCompiler.exe on Ubuntu agent?
我创建了一个 Azure Devops 构建管道,我正在尝试在 bitbucket (git) 上构建我的 ASP.NET MVC 和 Angular 混合站点项目。
首先签出项目,然后 nuget 恢复必要的包,然后构建 .NET。我使用 windows 2019 作为 azure 管道代理,以便构建成功。然而,它大约需要 7 分钟才能完成,而 运行 在 ubuntu 代理上执行任务(除了 .Net)要快得多!大约需要 2 分钟!
因此,我想使用 ubuntu,但是 运行我遇到了 MSBuild 任务的问题...
"/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.exe
从 Compiler Nuget 包(nuget 恢复任务?)继续 运行,因此它锁定了 src 文件夹并阻止了来自 [=43 的未来构建=]宁,例如导致这样的错误:
/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]
所以解决方案是终止 VBCSCompiler.exe
但由于在构建期间我无法实际访问托管机器,我不确定该怎么做。
到目前为止我的管道截图:
使用这种方法,我是否面临 dead-end 路径?构建 运行 在 windows 2019 上很好,但它花费的时间太长了,所以这就是为什么如果我能在 ubuntu 上成功地 运行 那会很棒!
您可以尝试以下解决方法:
1,设置MSBUILD参数/p:UseSharedCompilation=false
.
您可以将上述论点添加到 msbuild 任务的 msbuild arguments 字段中。参见 here。
2,将Microsoft.CodeDom.Providers.DotNetCompilerPlatform nupkg 升级到最新版本并从您的项目中删除Microsoft.Net.Compilers nupkg。有关详细信息,请参阅 here。
3、尝试指定 Roslyn 编译服务器的 TTL。
您可以在“变量”选项卡上定义管道变量 VBCSCOMPILER_TTL
,以便为 VBCSCompiler.exe
指定更短的空闲时间
或者你可以在配置文件的system.codedom/compilers/compiler
下添加<providerOption name="CompilerServerTimeToLive" value="[num of seconds]" />
。有关详细信息,请参阅 here。
4、使用CheckIfShouldKillVBCSCompiler
目标:
您可以尝试将以下内容添加到您的 csproj 文件中:
<Target Name="CheckIfShouldKillVBCSCompiler">
<PropertyGroup>
<ShouldKillVBCSCompiler>true</ShouldKillVBCSCompiler>
</PropertyGroup>
</Target>
见here。
基于 Ubuntu 20 的构建终于成功了!我不知道为什么删除这些行可以解决 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
文件中。
我创建了一个 Azure Devops 构建管道,我正在尝试在 bitbucket (git) 上构建我的 ASP.NET MVC 和 Angular 混合站点项目。
首先签出项目,然后 nuget 恢复必要的包,然后构建 .NET。我使用 windows 2019 作为 azure 管道代理,以便构建成功。然而,它大约需要 7 分钟才能完成,而 运行 在 ubuntu 代理上执行任务(除了 .Net)要快得多!大约需要 2 分钟!
因此,我想使用 ubuntu,但是 运行我遇到了 MSBuild 任务的问题...
"/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.exe
从 Compiler Nuget 包(nuget 恢复任务?)继续 运行,因此它锁定了 src 文件夹并阻止了来自 [=43 的未来构建=]宁,例如导致这样的错误:
/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]
所以解决方案是终止 VBCSCompiler.exe
但由于在构建期间我无法实际访问托管机器,我不确定该怎么做。
到目前为止我的管道截图:
使用这种方法,我是否面临 dead-end 路径?构建 运行 在 windows 2019 上很好,但它花费的时间太长了,所以这就是为什么如果我能在 ubuntu 上成功地 运行 那会很棒!
您可以尝试以下解决方法:
1,设置MSBUILD参数/p:UseSharedCompilation=false
.
您可以将上述论点添加到 msbuild 任务的 msbuild arguments 字段中。参见 here。
2,将Microsoft.CodeDom.Providers.DotNetCompilerPlatform nupkg 升级到最新版本并从您的项目中删除Microsoft.Net.Compilers nupkg。有关详细信息,请参阅 here。
3、尝试指定 Roslyn 编译服务器的 TTL。
您可以在“变量”选项卡上定义管道变量 VBCSCOMPILER_TTL
,以便为 VBCSCompiler.exe
或者你可以在配置文件的system.codedom/compilers/compiler
下添加<providerOption name="CompilerServerTimeToLive" value="[num of seconds]" />
。有关详细信息,请参阅 here。
4、使用CheckIfShouldKillVBCSCompiler
目标:
您可以尝试将以下内容添加到您的 csproj 文件中:
<Target Name="CheckIfShouldKillVBCSCompiler">
<PropertyGroup>
<ShouldKillVBCSCompiler>true</ShouldKillVBCSCompiler>
</PropertyGroup>
</Target>
见here。
基于 Ubuntu 20 的构建终于成功了!我不知道为什么删除这些行可以解决 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
文件中。