我有一个C#类库项目,我从C++项目中使用它。在以下情况下,这是非常有效的:
但是,我现在需要将C#库升级到net5.0.
并收到这个错误..。
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,这是最新的)。
发布于 2021-08-24 16:00:14
这有点棘手,但以下几点应该会有所帮助:
如果使用GUI,需要在属性中设置以下设置:在“根->扩展”下设置“公共语言运行时支持”:"Net核心运行时支持/clr:core“和".NET核心目标框架”:".NET 5.0“(您可能需要在选择第一个之后单击"apply”,以获得要更新的第二个框中的可能设置)
在.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>请注意,不可能在C++核心中创建.NET实例。C++/CLI项目必须是库,不能包含主入口点(如果有必要,可以创建存根加载器C#项目)。
然后你可能会体验到:
错误NETSDK1145: Apphost包没有安装
这份文件建议可以通过修改项目文件来克服这一问题,但如果不起作用,则可以在解决方案根文件夹中添加一个global.json文件以指向所需的SDK。
https://stackoverflow.com/questions/68905102
复制相似问题