You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CMake生成托管C++项目时目标框架标签异常如何通过CMakeLists.txt解决

解决方案

方案一:自定义XML注入(CMake ≥3.20,推荐)

通过CMake原生的VS_PROJECT_CUSTOM_XML属性直接向生成的.vcxproj文件注入所需的TargetFrameworkVersion节点,同时禁用默认生成的TargetFramework节点,不需要后续手动修改项目文件。
在你的托管C++目标配置段添加如下代码:

set_target_properties(NotifierLib PROPERTIES
  # 根据项目实际CLR模式调整,可选值:mixed/pure/safe/netcore
  COMMON_LANGUAGE_RUNTIME "mixed"
  # 禁用默认生成的<TargetFramework>节点
  DOTNET_TARGET_FRAMEWORK ""
  # 注入自定义属性组
  VS_PROJECT_CUSTOM_XML "
  <PropertyGroup>
    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
  </PropertyGroup>
  "
)

如果需要全局应用到所有托管C++目标,可以使用全局变量配置:

set(CMAKE_VS_GLOBALS
  "TargetFrameworkVersion=v4.7.2"
)

方案二:自定义.targets导入(兼容CMake <3.20)

如果使用的CMake版本低于3.20不支持VS_PROJECT_CUSTOM_XML,可以通过导入自定义MSBuild targets文件的方式覆盖默认配置:

  1. 先在项目根目录创建Custom.CLR.targets.in模板文件,内容如下:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
    <!-- 覆盖默认生成的TargetFramework属性 -->
    <TargetFramework />
  </PropertyGroup>
</Project>
  1. 在CMakeLists.txt中添加配置,导入上述targets文件:
configure_file(
  ${CMAKE_CURRENT_SOURCE_DIR}/Custom.CLR.targets.in
  ${CMAKE_BINARY_DIR}/Custom.CLR.targets
  @ONLY
)
# 应用到单个目标
set_target_properties(NotifierLib PROPERTIES
  COMMON_LANGUAGE_RUNTIME "mixed"
  VS_GLOBAL_ImportBeforeTargets "${CMAKE_BINARY_DIR}/Custom.CLR.targets"
)

验证方式

重新生成CMake缓存后,打开生成的.vcxproj文件,确认存在<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>节点,且无生效的<TargetFramework>节点,直接构建即可,不需要添加额外命令行参数。

内容的提问来源于stack exchange,提问作者k_k

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 05:36:02