首页 > 解决方案 > 如果 MSBuild 工具为时过早,如何让 MSBuild .proj 失败

问题描述

我有一个 MSBuild .proj 文件,由不同的人在各种机器上以通常的方式执行,比如 msbuild.exe thingummy.proj 它编译的 C# 项目包括 .Net 4.5 功能,所以如果你用不知道以后的 .Nets 的早期 MSBuild 编译它,您将收到“类、结构或接口成员声明中的无效标记 '='”这类消息,这些消息在其他地方都有详细记录。(例如,通过命令行而不是在 Visual Studio 上使用 MSBuild 时出现无效令牌错误

直接的解决方法是将您的 MSBuild 更新到最新版本,并确保您使用的是您认为的 MSBuild 版本。但是,如果不是得到一个深奥的“无效令牌......”消息(有点“想一想......”),而是说“需要 MSBuild v16 或更高版本(你的是v4.7)”或类似的东西。

所以我正在寻找一个MinimumMSBuildVersionRequired参数或类似的东西放在我的 msbuildthingummy.proj文件的顶部,以便在构建过程开始时,MSBuild 测试运行这个脚本的 MSBuild 是否足够新。我已经翻遍了,但找不到合适的候选人。

.proj我可以在我的MSBuild 脚本中设置这样的参数吗?或者在使用不适当的 MSBuild 版本运行时提供信息性消息的其他解决方法?

标签: c#msbuild

解决方案


好的,感谢@pavelanikhouski 的输入,这行得通:

在我的脚本顶部,我添加了这个:

<Project InitialTargets="MyInitialChecks" ...

'InitialTargets' 很神奇(一定是这样)。'MyInitialChecks' 是我选择的任何东西作为我的检查器目标的名称。

然后我添加一个检查器目标,如下所示:

<Target Name="MyInitialChecks" >
    <Error Condition="$(MSBuildToolsVersion) &lt; 15.0" 
        Text="The version of MSBuild being used for this build (v$(MSBuildToolsVersion)) is too early. v15.0 or later is required." />
</Target>

直到并包括 Visual Studio 2017 和 MSBuildToolsVersion v15.0。

正如 Pavel 所指出的,当谈到 VS2019 时,所有的赌注都没有了,因为它不再报告 MSBuildToolsVersion。请参阅https://developercommunity.visualstudio.com/content/problem/404485/vs2019-msbuildtoolsversion-is-not-a-version.html


推荐阅读