在C#的csproj项目中添加指定平台才执行的PostBuild命令
其实需求也很简单,现在.NET项目也能跨平台了,我的项目需要使用python执行一个post_build.py,所以需要在项目中添加PostBuild。所以最初,我添加了这样一个PostBuild:
<Target Name="PostBuild" AfterTargets="PostBuildEvent"> <Exec Command="python $(SolutionDir)..\Scripts\post_build.py --outputType=$(OutputType) --targetDir=$(TargetDir) --projectDir=$(ProjectDir) --projectName=$(ProjectName) --configurationName=$(ConfigurationName)" /> </Target>
只要机器上安装了Python,那么这个命令将不会有任何问题(Windows环境下)。不过当我将项目拿到MacOS下编译时,那么就遇到了问题。因为截止到目前,MacOS下的默认的python是python2,而我的脚本是按照python3的标准写的,因此在MacOS下执行就会有问题。因此有两个选择:
1. 把脚本改成python2兼容的? 但是我不想这么干。
2. 让PostBuild可以按照条件执行。在Windows下调用python,MacOS下调用python3。我选择的是这个。因此最终的PostBuild看起来像这样:
<Target Name="PostBuild" AfterTargets="PostBuildEvent"> <Exec Command="python $(SolutionDir)..\Scripts\post_build.py --outputType=$(OutputType) --targetDir=$(TargetDir) --projectDir=$(ProjectDir) --projectName=$(ProjectName) --configurationName=$(ConfigurationName)" Condition="$([MSBuild]::IsOSPlatform('Windows'))"/> <Exec Command="python3 $(SolutionDir)..\Scripts\post_build.py --outputType=$(OutputType) --targetDir=$(TargetDir) --projectDir=$(ProjectDir) --projectName=$(ProjectName) --configurationName=$(ConfigurationName)" Condition="$([MSBuild]::IsOSPlatform('MacOS'))"/> </Target>
参考:https://learn.microsoft.com/en-us/visualstudio/msbuild/property-functions?view=vs-2022