CSharpUtilities

版本 3.8 新增。

此实用模块旨在简化 CSharp/.NET 目标的配置,并提供了一系列命令来管理 CSharp 目标与 Visual Studio Generators(2010 及更高版本)的集成。

在 CMake 项目中加载此模块,使用

include(CSharpUtilities)

命令

本模块提供以下命令

主要命令

辅助命令

主要命令

csharp_set_windows_forms_properties

为使用 Windows Forms 的源文件设置属性

csharp_set_windows_forms_properties([<files>...])
<files>...

零个或多个源文件的列表,这些文件与设置 VS_CSHARP_<tagname> 源文件属性相关。这通常包括带有 .cs.resx.Designer.cs 扩展名的文件。

当项目中的 CSharp 目标使用 Windows Forms 时,请使用此命令。

此命令在提供的文件列表中搜索以 .Designer.csdesigner 文件)或 .resxresource 文件)结尾的配对相关文件。对于每个此类文件,会搜索对应的基本 .cs 文件(具有相同的基本名称)。找到后,将按如下方式设置 VS_CSHARP_<tagname> 源文件属性:

对于 .cs 文件
  • VS_CSHARP_SubType "Form"

对于 .Designer.cs 文件(如果存在)
  • VS_CSHARP_DependentUpon <cs-filename>

  • VS_CSHARP_DesignTime ""(如果先前已定义,则删除该标记)

  • VS_CSHARP_AutoGen ""(如果先前已定义,则删除该标记)

对于 .resx 文件(如果存在)
  • VS_RESOURCE_GENERATOR ""(如果先前已定义,则删除该标记)

  • VS_CSHARP_DependentUpon <cs-filename>

  • VS_CSHARP_SubType "Designer"

csharp_set_designer_cs_properties

根据同级文件名设置 .Designer.cs 文件的源文件属性

csharp_set_designer_cs_properties([<files>...])
<files>...

零个或多个源文件的列表,这些文件与设置 VS_CSHARP_<tagname> 源文件属性相关。这通常包括带有 .resx.settings.Designer.cs 扩展名的文件。

如果 CSharp 目标 **不** 使用 Windows Forms,则使用此命令(对于 Windows Forms,请改用 csharp_set_windows_forms_properties())。

此命令在提供的列表中搜索以 .Designer.csdesigner 文件)结尾的文件。对于每个此类文件,它会查找具有相同基本名称但扩展名不同的同级文件。如果找到匹配的文件,将根据匹配的扩展名在相应的 .Designer.cs 文件上设置适当的源文件属性。

如果匹配的是 .resx 文件

  • VS_CSHARP_AutoGen "True"

  • VS_CSHARP_DesignTime "True"

  • VS_CSHARP_DependentUpon <resx-filename>

如果匹配的是 .cs 文件

  • VS_CSHARP_DependentUpon <cs-filename>

如果匹配的是 .settings 文件

  • VS_CSHARP_AutoGen "True"

  • VS_CSHARP_DesignTimeSharedInput "True"

  • VS_CSHARP_DependentUpon <settings-filename>

注意

由于 .Designer.cs 文件的源文件属性是根据找到的匹配项设置的,并且每个匹配项都会设置 VS_CSHARP_DependentUpon 源文件属性,因此每个 Designer.cs 文件应该只有一个匹配项。

csharp_set_xaml_cs_properties

为使用 Windows Presentation Foundation (WPF) 和 XAML 的源文件设置属性

csharp_set_xaml_cs_properties([<files>...])

如果 CSharp 目标使用 WPF/XAML,则使用此命令。

<files>...

零个或多个源文件的列表,这些文件与设置 VS_CSHARP_<tagname> 源文件属性相关。这通常包括带有 .cs.xaml.xaml.cs 扩展名的文件。

此命令在提供的文件列表中搜索以 .xaml.cs 结尾的文件。对于每个 XAML 代码隐藏文件,它会搜索具有相同基本名称但扩展名不同的相应 .xaml 文件。如果找到,则在 .xaml.cs 文件上设置以下源文件属性:

  • VS_CSHARP_DependentUpon <xaml-filename>

辅助命令

这些命令由上述主要命令使用,通常不直接使用

csharp_get_filename_keys

计算一个标准化的键值列表,用于独立于 CMake 中提供的相对或绝对路径来标识源文件,并消除大小写敏感性。

csharp_get_filename_keys(<variable> [<files>...])
<variable>

存储计算出的键列表的变量名称。

<files>...

零个或多个源文件路径,这些路径通过 add_library()add_executable() 等命令提供给 CSharp 目标。

此命令对文件路径进行规范化,以确保一致地标识源文件。当使用不同的路径形式将源文件添加到目标时,这一点非常有用。如果没有进行规范化,CMake 可能会将 myfile.Designer.cs${CMAKE_CURRENT_SOURCE_DIR}/myfile.Designer.cs 等路径视为不同的文件,这在设置源文件属性时可能会导致问题。

例如,以下代码将无法设置属性,因为文件路径不完全匹配

add_library(lib myfile.cs ${CMAKE_CURRENT_SOURCE_DIR}/myfile.Designer.cs)

set_source_files_properties(
  myfile.Designer.cs
  PROPERTIES VS_CSHARP_DependentUpon myfile.cs
)
csharp_get_filename_key_base

返回键的 **不包含** 扩展名的完整文件路径和名称

csharp_get_filename_key_base(<base> <key>)
<base>

包含从 <key> 计算出的基本值(不包含文件扩展名)的变量名称。

<key>

将计算其基本值的键。预期为来自 csharp_get_filename_keys() 的大写完整文件名。

csharp_get_dependentupon_name

计算一个字符串,该字符串可用作源文件属性 VS_CSHARP_<tagname> 的值,其中 <tagname>DependentUpon

csharp_get_dependentupon_name(<variable> <file>)
<variable>

包含结果值的变量名称。值包含 <file> 的名称,不包含目录。

<file>

用于转换为源文件属性 VS_CSHARP_DependentUpon 的值的 <file> 文件名。