C++ (vcxproj) 项目是否可以引用 net5.0 C# 项目

Is it possible for a C++ (vcxproj) project to reference a net5.0 C# project

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

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

并收到此错误....

C:\Program Files\Microsoft Visual Studio22\Preview\MSBuild\Current\Bin\amd64\Microsoft.Common.CurrentVersion.targets(1806,5):

error : Project '..\cslib\cslib.csproj' targets 'net5.0'.
It cannot be referenced by a project that targets '.NETFramework,Version=v5.0'.

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

不清楚“v5.0”对于 C++/vcxproj 格式文件是否正确 TFM - msbuild 可能只是默认回退到 v4.7.2,但我想不出更好的选择。

有没有办法做到这一点? 似乎 现在应该可以在 C++ 项目中以 net5.0 为目标。 (我正在使用 Visual Studio 2022 预览版,PlatformToolset 设置为最新的 v143

这有点棘手,但以下内容应该有所帮助:

如果使用GUI,需要在属性中进行以下设置:在“Root->Extended”设置“Common language runtime support”下:“Net Core runtime support /clr:core”和“.NET Core Target framework": ".NET 5.0"(您可能需要在选择第一个后单击“​​应用”,以获取第二个框中可能的设置以进行更新)

在 .vxcproj 中,这导致:

...
<PropertyGroup Label="Globals">
    <TargetFrameworkVersion>v5.0</TargetFrameworkVersion>
    <Keyword>ManagedCProj</Keyword>
    <TargetFramework>net5.0</TargetFramework>
    ...
  </PropertyGroup>

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


<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v142</PlatformToolset>
    <CLRSupport>NetCore</CLRSupport>
    ...
  </PropertyGroup>

请注意,无法在 .NET Core 中创建 C++ exe。 C++/CLI 项目必须是库并且不能包含主入口点(如果必须创建一个存根加载程序 C# 项目)。

可能然后经历:

error NETSDK1145: The Apphost pack is not installed

This documentation suggests this can be overcome by modifying the project file but if that does not work, a global.json 可以在解决方案根文件夹中添加文件以指向所需的 SDK。