【问题标题】:How to check string contains a string in msbuild?如何检查字符串是否包含msbuild中的字符串?
【发布时间】:2021-11-10 06:39:20
【问题描述】:

我在为我的 vcxproj 项目编写 targets 文件时遇到问题。 在我的targets 文件中,我首先要根据配置设置一些构建属性,所以我有这个:

  <Choose>
    <When Condition="$(Configuration.Contains('Debug', StringComparison.OrdinalIgnoreCase))">
      <PropertyGroup>
      </PropertyGroup>
    </When>
  </Choose>

但是当我尝试使用导入的目标文件打开项目时出现错误

error  : The expression ""Debug".Contains(Debug, StringComparison.OrdinalIgnoreCase)" cannot be evaluated. Method 'System.String.Contains' not found.

我正在使用 Visual Studio 2022 预览版。 根据MSBuild docs,字符串只是一个.Net5 字符串,应该有方法。 有人可以帮帮我吗?

【问题讨论】:

    标签: msbuild vcxproj


    【解决方案1】:

    Contains 的重载仅在最近的 .Net 版本中可用,而不是在例如4.8 所以找不到它。解决方法:转换为较低然后比较

    <Choose>
      <When Condition="$(Configuration.ToLowerInvariant().Contains('debug'))">
      </When>
    </Choose>
    

    【讨论】:

    • 我不懂静态方法。例如,我可以使用&lt;When Condition="$(Configuration.IndexOf('Debug', 0, StringComparison.OrdinalIgnoreCase)) != -1"&gt;。我只是觉得ContainsIndexOf 好...
    • 抱歉我的错误,没有仔细看。用正确的信息编辑了我的答案:我猜只是您的 MSbuild 版本没有那种过载,因为我认为它实际上不是针对 .Net 5 或类似版本构建的?
    • 这看起来很奇怪。我假设 Visual Studio 2022 Preview 使用的是最新版本,但可能不是。我对 .Net 以及 .Net 5 的新功能了解不多。如果没有人使用Contains,我想你是对的。
    • VS 2022 可能会使用最新版本的 .Net 来构建您自己的项目,但这并不一定意味着用于构建 msbuild 本身的 .Net 版本是相同的。
    猜你喜欢
    • 2017-09-23
    • 2011-11-09
    • 2013-05-18
    • 1970-01-01
    • 2011-01-21
    • 2012-06-23
    • 2011-03-31
    • 1970-01-01
    相关资源
    最近更新 更多