C++(vcxproj)项目能否引用TargetFramework为net5.0的C#项目?
解决方案
问题根因
你遇到的报错核心原因是版本标识不匹配:vX.X格式的TargetFrameworkVersion是.NET Framework专属的版本标识,.NET 5+不存在这种格式的版本号,MSBuild识别v5.0时会默认匹配不存在的.NET Framework v5.0,自然和C#项目的net5.0 TFM不兼容。另外传统C++/CLI项目默认适配.NET Framework,必须调整项目配置才能支持.NET 5+。
具体操作步骤
- 确认Visual Studio 2022已安装「C++/CLI 支持 for .NET」组件,没有的话在Visual Studio Installer的工作负载里勾选安装
- 右键C++项目选择卸载项目,再次右键选择编辑vcxproj文件,做如下修改:
- 删除原有
<TargetFrameworkVersion>vX.X</TargetFrameworkVersion>配置行 - 在第一个
<PropertyGroup>节点下新增配置:<TargetFramework>net5.0-windows</TargetFramework> - 查找
<CLRSupport>节点,将值从原来的true改为NetCore
- 删除原有
- 保存vcxproj文件,重新加载项目,重新生成解决方案即可
注意事项
- .NET 5+的C++/CLI仅支持Windows平台,因此TFM必须携带
-windows后缀 - C++/CLI项目不支持AnyCPU,你需要将C#类库和C++项目的平台目标统一设置为x86或x64
- 若你需要同时兼容旧版本基于.NET Framework的C++项目,可以给C#类库配置多目标:将C#项目的
<TargetFramework>net5.0</TargetFramework>改为<TargetFrameworks>netstandard2.0;net5.0</TargetFrameworks>,两种框架版本的项目都可以正常引用
内容的提问来源于stack exchange,提问作者NeilMacMullen
相关产品推荐
相关产品推荐

