【问题标题】:How to get a MSBuild .proj to fail informatively if MSBuild tools is too early如果 MSBuild 工具太早,如何让 MSBuild .proj 失败
【发布时间】: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 的单行代码,请提供一个示例。

标签: c# msbuild


【解决方案1】:

好的,感谢@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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 2012-06-03
    • 2017-09-15
    • 2019-10-24
    • 2021-06-08
    • 2018-05-27
    相关资源
    最近更新 更多