首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++ (vcxproj)项目可以引用net5.0 C#项目吗?

C++ (vcxproj)项目可以引用net5.0 C#项目吗?
EN

Stack Overflow用户
提问于 2021-08-24 09:31:43
回答 1查看 853关注 0票数 1

我有一个C#类库项目,我从C++项目中使用它。在以下情况下,这是非常有效的:

  • TargetFramework设置为netstandard2.0的C#项目
  • TargetFrameworkVersion设置为v4.7.2的C++项目

但是,我现在需要将C#库升级到net5.0.

  • TargetFramework将C#项目设置为net5.0 (使用新样式的项目文件)
  • TargetFrameworkVersion设置为v5.0的C++项目

并收到这个错误..。

C:\程序文件\Microsoft Studio\2022\Preview\MSBuild\Current\Bin\amd64\Microsoft.Common.CurrentVersion.targets(1806,5): 错误:项目'..\cslib\cslib.csproj‘目标'net5.0’。 它不能被目标为'.NETFramework,Version=v5.0‘的项目引用。

请注意,不可能将C++项目的C++设置为"net5.0“或"net5.0-windows”,因为这会导致项目加载错误:

还不清楚"v5.0“是否是C++/vcxproj格式文件的正确TFM --在默认情况下,msbuild可能只是返回到v4.7.2,但我想不出更好的选择了。

有办法做到这一点吗?现在看来,C++项目中的net5.0应该是可能的了。(我使用的是VisualStudio2022预览,PlatformToolset设置为v143,这是最新的)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-24 16:00:14

这有点棘手,但以下几点应该会有所帮助:

如果使用GUI,需要在属性中设置以下设置:在“根->扩展”下设置“公共语言运行时支持”:"Net核心运行时支持/clr:core“和".NET核心目标框架”:".NET 5.0“(您可能需要在选择第一个之后单击"apply”,以获得要更新的第二个框中的可能设置)

在.vxcproj中,这将导致:

代码语言:javascript
复制
...
<PropertyGroup Label="Globals">
    <TargetFrameworkVersion>v5.0</TargetFrameworkVersion>
    <Keyword>ManagedCProj</Keyword>
    <TargetFramework>net5.0</TargetFramework>
    ...
  </PropertyGroup>

和(每次构建配置一次):

代码语言:javascript
复制
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v142</PlatformToolset>
    <CLRSupport>NetCore</CLRSupport>
    ...
  </PropertyGroup>

请注意,不可能在C++核心中创建.NET实例。C++/CLI项目必须是库,不能包含主入口点(如果有必要,可以创建存根加载器C#项目)。

然后你可能会体验到:

错误NETSDK1145: Apphost包没有安装

这份文件建议可以通过修改项目文件来克服这一问题,但如果不起作用,则可以在解决方案根文件夹中添加一个global.json文件以指向所需的SDK。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68905102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档