前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在编译期间使用 Roslyn/MSBuild 自带的方法/函数判断、计算和修改属性

在编译期间使用 Roslyn/MSBuild 自带的方法/函数判断、计算和修改属性

作者头像
walterlv
发布2023-10-22 10:03:39
1880
发布2023-10-22 10:03:39
举报
文章被收录于专栏:walterlv - 吕毅的博客

充分利用 MSBuild 自带的方法,可以在编译期间完成大多数常见的属性转换,而不再需要自己专门写库来完成。

本文介绍如何使用 MSBuild 自带的方法,并列举 MSBuild 中各种自带的方法。


如何在编译期间使用 MSBuild 自带的方法

当然,在修改编译期间的代码的时候,你可能需要提前了解项目文件相关的知识:

以下是使用 MSBuild 自带方法的最简单的一个例子,执行 5-1 的数学运算。

1

<Walterlv>$(MSBuild::Subtract(5, 1))</Walterlv>

更复杂的,可能是 MSBuild 方法调用的嵌套了:

1

<WalterlvPath Condition="HasTrailingSlash('$(WalterlvPath)')">$(WalterlvPath.Substring(0, $(MSBuild::Add($(WalterlvPath.Length), -1))))</WalterlvPath>

以上两段示例分别来自我的另外两篇博客,如果不明白,可以参考这两篇博客的内容:

MSBuild 自带的方法

数学运算

MSBuild 中数学运算的部分可以参考我的另一篇博客:

EnsureTrailingSlash

确保路径结尾有斜杠。

可参考我的另一篇博客:

GetDirectoryNameOfFileAbove & GetPathOfFileAbove

这两个是非常有用却又非常容易被忽视的 API,非常有必要介绍一下。

可以阅读我的另一篇博客了解其用途和用法:

MakeRelative

计算两个路径之间的相对路径表示。

1 2 3 4 5 6

<PropertyGroup> <Path1>C:\Walterlv\</Path1> <Path2>C:\Walterlv\Demo\</Path2> <WalterlvPath1>$(MSBuild::MakeRelative($(Path1), $(Path2)))</WalterlvPath1> <WalterlvPath2>$(MSBuild::MakeRelative($(Path2), $(Path1)))</WalterlvPath2> </PropertyGroup>

WalterlvPath1 的值会计算为 Demo\,而 WalterlvPath2 的值会计算为 ..\

ValueOrDefault

如果赋值了,就使用所赋的值;否则使用参数指定的值:

1 2 3 4

<PropertyGroup> <WalterlvValue1>$(MSBuild::ValueOrDefault('$(FooBar)', 'walterlv'))</WalterlvValue1> <WalterlvValue2>$(MSBuild::ValueOrDefault('$(WalterlvValue1)', 'lindexi'))</WalterlvValue2> </PropertyGroup>

第一行,因为我们没有定义任何一个名为 FooBar 的属性,所以 WalterlvValue1 属性会计算得到 walterlv 值。第二行,因为 WalterlvValue1 已经得到了一个值,所以 WalterlvValue2 也会得到 WalterlvValue1 的值,也就是 walterlv,不会得到 lindexi

其他

MSBuild 剩下的一些方法使用场景非常有限(不懂就别瞎装懂了),这里做一些简单的介绍。


参考资料

本文会经常更新,请阅读原文: https://blog.walterlv.com/post/msbuild-property-functions.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://blog.walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 ([email protected])

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-05-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何在编译期间使用 MSBuild 自带的方法
  • MSBuild 自带的方法
    • 数学运算
      • EnsureTrailingSlash
        • GetDirectoryNameOfFileAbove & GetPathOfFileAbove
          • MakeRelative
            • ValueOrDefault
              • 其他
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档