在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

 

posted @ 2023-03-10 09:11  bodong  阅读(183)  评论(0编辑  收藏  举报