CMake配置C#项目:如何将OutputType设置为WinExe?
解决CMake中.NET 4.8 WPF项目OutputType设为WinExe的问题
方法1:修正.NET SDK类型(推荐)
WPF项目需要使用桌面专用SDK而非通用.NET SDK,替换你的SDK配置:
set(CMAKE_DOTNET_SDK "Microsoft.NET.Sdk.WindowsDesktop") set(CMAKE_DOTNET_TARGET_FRAMEWORK "net48") # 明确指定输出类型为WinExe set(CMAKE_DOTNET_OUTPUT_TYPE "WinExe")
完成上述设置后再执行add_executable,CMake会自动生成正确的WinExe类型项目,不会出现控制台窗口。
方法2:针对目标覆盖OutputType属性(避免重复条目)
若必须使用通用SDK,可在add_executable之后,通过set_target_properties直接为目标设置属性,而非全局属性:
add_executable(${PROJECT_NAME} # 此处添加你的WPF源文件,如App.xaml、MainWindow.xaml等 ) set_target_properties(${PROJECT_NAME} PROPERTIES VS_GLOBAL_OutputType "WinExe" # 确保引入WPF必需的程序集 VS_DOTNET_REFERENCES "PresentationCore;PresentationFramework;WindowsBase" )
该方式会覆盖CMake自动生成的OutputType条目,不会产生重复配置。
方法3:针对特定配置修改属性(对应Condition属性组)
如果需要仅在Debug/Release配置下调整,可使用CMake生成器表达式:
set_target_properties(${PROJECT_NAME} PROPERTIES VS_GLOBAL_OutputType $<$<CONFIG:Debug>:WinExe> VS_GLOBAL_OutputType $<$<CONFIG:Release>:WinExe> )
这会生成带Condition="'$(Configuration)' == 'Debug'"和Release的属性组,覆盖默认设置。
额外注意事项
- 确保
add_executable中包含WPF核心文件(如App.xaml、MainWindow.xaml),CMake需要这些文件识别项目类型。 - 清理之前生成的CMake缓存和项目文件,避免旧配置干扰新设置。
内容的提问来源于stack exchange,提问作者Perijahh
相关产品推荐
相关产品推荐

