CSharpUtilities

版本 3.8 新增。

此实用模块旨在简化 CSharp/.NET 目标的配置,并提供了一系列用于管理 CSharp 目标的命令,适用于 Visual Studio 生成器 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.cs (设计器文件) 或 .resx (资源文件) 结尾的相关文件对。对于每个此类文件,都会搜索相应的基本 .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.cs(*设计器*文件)结尾的文件。对于每个此类文件,它会查找具有相同基本名称但不同扩展名的同级文件。如果找到匹配的文件,则根据匹配的扩展名在相应的 .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 源文件属性的值。