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

CMake C#项目add_dependencies自动添加引用问题及构建顺序设置方法

问题答复

1. 该行为是否为预期设计

是的,这是CMake Visual Studio生成器针对C#目标的预期默认行为。
从CMake 3.8版本开始,为适配.NET项目的常规构建逻辑,官方对C#目标的add_dependencies指令做了特殊实现:默认会将声明的依赖项自动转换为MSBuild层面的项目引用,省去开发者额外手动配置引用的步骤。该特性在常规C#项目开发场景下可以简化配置,但确实没有对「仅需构建顺序」和「需要添加引用」两种需求做默认区分。

2. 仅设置构建顺序、不自动添加引用的解决方案

根据你使用的CMake版本,可以选择以下两种方案:

方案1:使用官方专用属性(CMake 3.18及以上版本适用)

CMake 3.18版本专门新增了VS_DOTNET_SKIP_DEPENDENCY_PROJECT_REFERENCES目标属性,开启后会禁用C#目标下add_dependencies自动转项目引用的逻辑,仅保留构建顺序控制能力。
使用方式如下:

# 替换为你实际的C#目标名称
set_property(TARGET YourCSharpTarget PROPERTY VS_DOTNET_SKIP_DEPENDENCY_PROJECT_REFERENCES ON)

配置完成后再通过add_dependencies声明的所有依赖都只会控制构建顺序,不会产生项目引用。

方案2:自定义中间目标做依赖中转(全版本兼容)

如果你的CMake版本低于3.18,可以通过自定义中间目标中转依赖的方式绕开自动添加引用的逻辑:由于CMake只会将对.NET类型目标的依赖转换为项目引用,对自定义构建目标的依赖只会保留构建顺序控制。
使用方式如下:

# 定义自定义预构建目标,依赖所有需要优先构建的项目
add_custom_target(PreBuildRequirements ALL
  DEPENDS YourFirstRequiredTarget YourSecondRequiredTarget # 替换为你实际需要先构建的目标名
)
# 给C#目标声明对自定义目标的依赖
add_dependencies(YourCSharpTarget PreBuildRequirements)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:30:03