C++ (vcxproj) 项目是否可以引用 net5.0 C# 项目
Is it possible for a C++ (vcxproj) project to reference a net5.0 C# project
我有一个 C# class 库项目,我从 C++ 项目中使用它。这在以下情况下非常有效:
- C# 项目已将 TargetFramework 设置为 netstandard2.0
- C++ 项目 TargetFrameworkVersion 设置为 v4.7.2
但是,我现在需要将C#库升级到net5.0...
- C# 项目已将 TargetFramework 设置为 net5.0(使用新样式项目文件)
- C++ 项目已将 TargetFrameworkVersion 设置为 v5.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。
我有一个 C# class 库项目,我从 C++ 项目中使用它。这在以下情况下非常有效:
- C# 项目已将 TargetFramework 设置为 netstandard2.0
- C++ 项目 TargetFrameworkVersion 设置为 v4.7.2
但是,我现在需要将C#库升级到net5.0...
- C# 项目已将 TargetFramework 设置为 net5.0(使用新样式项目文件)
- C++ 项目已将 TargetFrameworkVersion 设置为 v5.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。