如何为 ItemGroup (*.csproj) 指定 '|net35|net40|net45|'.Contains($(TargetFramework)) 条件?
How to specify a '|net35|net40|net45|'.Contains($(TargetFramework)) condition for an ItemGroup (*.csproj)?
我有一个多目标 C# (SDK) 项目,我必须只在一些较旧的框架版本中包含某个文件,我可以像这样轻松实现它:
<ItemGroup Condition="('$(TargetFramework)'=='net35') Or ('$(TargetFramework)'=='net40') Or ('$(TargetFramework)'=='net45') Or ('$(TargetFramework)'=='net451') Or ('$(TargetFramework)'=='net452')">
<!-- do something -->
</ItemGroup>
但这看起来有点笨拙而且不容易阅读,所以我尝试这样做(以及它的几十种变体)但没有成功:
<ItemGroup Condition="'|net35|net40|net403|net45|net451|net452|'.Contains('|$(TargetFramework)|')">
<!-- do something -->
</ItemGroup>
有没有办法用字符串包含操作来做到这一点?
我查看了这样的帖子:Is there any MSbuild task to check if a string contains another string (similar to string.contains) 但他们在那里所做的似乎对我不起作用。
我使用的版本是Visual Studio2019(16.9.4)
您似乎无法直接对字符串文字调用实例字符串函数。 The MSBuild documentation 表示只能调用属性的实例方法。
通过将您当前内联的值移动到自定义 属性,然后您可以像这样使用此 属性 的 Contains
方法:
<PropertyGroup>
<Frameworks>|net35|net40|net403|net45|net451|net452|</Frameworks>
</PropertyGroup>
<ItemGroup Condition="$(Frameworks.Contains('|$(TargetFramework)|'))">
<!-- do something -->
</ItemGroup>
我有一个多目标 C# (SDK) 项目,我必须只在一些较旧的框架版本中包含某个文件,我可以像这样轻松实现它:
<ItemGroup Condition="('$(TargetFramework)'=='net35') Or ('$(TargetFramework)'=='net40') Or ('$(TargetFramework)'=='net45') Or ('$(TargetFramework)'=='net451') Or ('$(TargetFramework)'=='net452')">
<!-- do something -->
</ItemGroup>
但这看起来有点笨拙而且不容易阅读,所以我尝试这样做(以及它的几十种变体)但没有成功:
<ItemGroup Condition="'|net35|net40|net403|net45|net451|net452|'.Contains('|$(TargetFramework)|')">
<!-- do something -->
</ItemGroup>
有没有办法用字符串包含操作来做到这一点?
我查看了这样的帖子:Is there any MSbuild task to check if a string contains another string (similar to string.contains) 但他们在那里所做的似乎对我不起作用。
我使用的版本是Visual Studio2019(16.9.4)
您似乎无法直接对字符串文字调用实例字符串函数。 The MSBuild documentation 表示只能调用属性的实例方法。
通过将您当前内联的值移动到自定义 属性,然后您可以像这样使用此 属性 的 Contains
方法:
<PropertyGroup>
<Frameworks>|net35|net40|net403|net45|net451|net452|</Frameworks>
</PropertyGroup>
<ItemGroup Condition="$(Frameworks.Contains('|$(TargetFramework)|'))">
<!-- do something -->
</ItemGroup>