在写项目文件的时候,需要根据不同的条件定义或执行不同的代码,有一些比较常使用的判断,本文收藏起来,方便大家抄代码
在 msbuild 的项目文件 cspoj 或 xx.target 等文件里面,可以使用 Condition 条件写在很多标签元素作为判断条件
例如以下代码,在 Target 上面添加条件,只有条件满足了才会执行
以上代码的名为 Lindexi 的 Target 将在 DEBUG 模式下,且 TargetFramework 为 net45 才执行
本文是 手把手教你写 Roslyn 修改编译 的系列文章,阅读本文之前,期望大家已经了解了 csproj 或 msbuild 等的基础语法和知识。如对此不了解,推荐先阅读 MSBuild 如何编写带条件的属性、集合和任务 Condition? - walterlv
下面将告诉大家一些常使用的判断的写法或代码片
判断在调试下编译
请看代码
这里 Configuration 的判断是不区分大小写的,默认写的是 Debug
字符串。而全大写的 DEBUG
则更多是用在条件编译里面
例如这样写即可表示在 Debug 模式下的条件满足下,将在 PropertyGroup 添加 MainProjectPath 属性的赋值
判断在发布下编译
请看代码
也就是上面代码反过来判断不是在调试下编译
另一个判断方法请看代码,这是不推荐的判断方法
这个不推荐的写法,一般只有调试下和非调试下,用上面的写法可能有逗比写了 Release-x
于是就判断不是发布下,此时就没有做发布的优化
判断平台
判断在 .NET Framework 4.5 运行
对应的判断 .NET Standard 使用如下缩写 netstandard1.0
等
判断 .NET Core 使用如下缩写 netcoreapp1.0
等
判断是否 Windows App SDK 可使用 GetTargetPlatformIdentifier 辅助,如判断 net6.0-windows10.0.19041
版本
多个判断
需要同时生效有两个写法,如判断只有在 .NET Framework 4.5 同时在调试下才生效,第一个写法的代码如下
第二个方法是使用关键字 And 连接
两个条件的或判断使用关键字 Or 连接
判断宏
如以下代码即可判断是否定义了名为 NET30
的宏或条件编译符
判断框架版本大于或等于
使用 VersionGreaterThanOrEquals 的方式,传入 TargetFrameworkVersion 进行判断。如以下代码,判断 TargetFramework 是否大于或等于 3.0 的版本
以上的 TargetFrameworkVersion
是在 SDK 获取的,代码如下
判断文件夹是否以斜杠结尾
如下面代码,判断 BaseIntermediateOutputPath 是否以斜杠结尾,否则就加上斜杠
判断文件存在
在条件判可以用 Exists
判断文件或文件夹是否存在,如以下代码
可以看到两个代码的不相同,使用 !
可以判断为 原来是相同的就返回false
的值,即取反的方式,这里的 $(OutputPath)
是存在的,所以编译会输出类似下面代码
判断当前构建的系统平台
判断当前运行 msbuild 或 dotnet 命令所在的系统平台,可使用 [MSBuild]::IsOSPlatform
进行判断。如下面判断是跑在 Windows 平台
如下面判断是跑在 Linux 平台上
以上为判断当前构建时所运行的平台,而不是当前正在构建哪个平台的包
更多判断
MSBuild 如何编写带条件的属性、集合和任务 Condition? - walterlv
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。 欢迎转载、使用、重新发布,但务必保留文章署名 林德熙 (包含链接: https://blog.lindexi.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我 联系。