【发布时间】:2019-07-11 23:09:14
【问题描述】:
我有一个 MSBuild .proj 文件,由不同的人在各种机器上以通常的方式执行,例如 msbuild.exe thingummy.proj 它编译的 C# 项目包括 .Net 4.5 功能,所以如果你用早期的 MSBuild 编译它不知道以后的.Nets,你会得到“类、结构或接口成员声明中的无效标记'='”这类消息,这些消息在其他地方都有很好的记录。 (例如Invalid Token Errors when using MSBuild via Command Line but not on Visual Studio)
直接的解决方法是将您的 MSBuild 更新到最新版本,并确保您使用的是您认为的 MSBuild 版本。但是,如果不是得到一个深奥的“无效令牌......”消息(有点“想一想......”),而是说“需要 MSBuild v16 或更高版本(你的是v4.7)”或类似的东西。
所以我正在寻找一个 MinimumMSBuildVersionRequired 参数或类似的东西放在我的 msbuild thingummy.proj 文件的顶部,以便在构建过程开始时,MSBuild 测试以查看 MSBuild 是否正在运行这个脚本是足够新的。我找遍了所有地方,但找不到合适的人选。
我可以在.proj MSBuild 脚本中设置这样的参数吗?或者在 MSBuild 版本不足时提供其他解决方法来提供信息性消息?
【问题讨论】:
-
您可以创建一个在
BeforeTargets="PrepareForBuild"上运行的目标并检查 MSBuild 版本 -
谢谢,但我的问题是你如何检查 MSBuild 版本,而不是在哪里可以进行这样的检查(是的,BeforeTargets 将是一个指向与任何人选择的名称,或者在要运行的第一个目标中)。
-
尝试使用类似
" '$(MSBuildToolsVersion)' != '' OR '$(MSBuildToolsVersion)' < '15.0' "的东西,注意VS2019返回Current而不是版本号 -
您是否将 MSBuildToolsVersion 设置在所有构建脚本的顶部?
-
我相信
MSBuildToolsVersion是你得到的,而不是你设置的。如果在构建脚本的顶部有一个用于指定最小MSBuildToolsVersion的单行代码,请提供一个示例。