如何在.csproj文件中的另一个Target中嵌套一个Target



长话短说,在nuget还原任务完成后,我需要杀死Azure管道Ubuntu代理上的VBCSCompiler.exe。在windows2019代理上,我不需要这么做,但在ubuntu上,我遇到了一个问题:

/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]

所以根据Levi在这篇文章中的说法,我需要在.csproj文件中添加一行<Target Name="CheckIfShouldKillVBCSCompiler">。我是这样添加的:

...
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target> -->
<Target Name="CheckIfShouldKillVBCSCompiler">
<PropertyGroup>
<ShouldKillVBCSCompiler>true</ShouldKillVBCSCompiler>
</PropertyGroup>
</Target>
</Project>

但这并没有解锁/bin/roslyn路径。

我认为这必须添加到BeforeBuild目标行中(例如嵌套它们(,所以我尝试了以下操作:

<Target Name="BeforeBuild">
<Target Name="CheckIfShouldKillVBCSCompiler">
<PropertyGroup>
<ShouldKillVBCSCompiler>true</ShouldKillVBCSCompiler>
</PropertyGroup>
</Target>
</Target>

但我最终犯了一个错误:error MSB4067: The element <PropertyGroup> beneath element <Target> is unrecognized.

我从这个答案中了解到,这是不可能实现的。

目标不能嵌套在另一个目标中。相反,目标可以这样修改:

<Target Name="CheckIfShouldKillVBCSCompiler"  BeforeTargets="build">
<PropertyGroup>
<ShouldKillVBCSCompiler>true</ShouldKillVBCSCompiler>
</PropertyGroup>
</Target>

然而,这并没有帮助解决我最初的构建问题。采用了不同的方法

相关内容

  • 没有找到相关文章

最新更新