如何在C#项目的CMakeLists.txt中启用可为空引用类型?
如何在CMake中为C#项目正确启用可为空引用类型?
在CMake的C#项目中,设置LangVersion可以直接通过CMAKE_CSharp_FLAGS传递参数:
set( CMAKE_CSharp_FLAGS "-langversion:8" )
这会在生成的.csproj文件中生成对应的属性节点:
<LangVersion>8</LangVersion>
但如果尝试通过同样的方式添加-nullable参数:
set( CMAKE_CSharp_FLAGS "-langversion:8 -nullable" )
CMake会将-nullable直接放入<AdditionalOptions>节点:
<AdditionalOptions>-nullable</AdditionalOptions>
这会导致CS9632等可为空注解相关警告,因为MSBuild需要的是<Nullable>enabled</Nullable>项目属性,而非直接传递编译器参数。
正确的设置方式
CMake 3.20及以上版本(你使用的3.30.5满足要求)提供了专门的属性来配置可为空引用类型:
- 全局设置(对所有C#目标生效):
set(CMAKE_CSharp_NULLABLE "ENABLED")
- 单个目标设置(仅对指定项目生效):
add_executable(YourCSharpTarget ...) set_property(TARGET YourCSharpTarget PROPERTY CSharp_NULLABLE "ENABLED")
通过上述方式设置后,生成的.csproj文件会自动添加:
<Nullable>enabled</Nullable>
从而正确启用可为空引用类型,避免相关编译警告。
内容的提问来源于stack exchange,提问作者DevSolar
相关产品推荐
相关产品推荐

