我正在尝试将 C++/CLI 库
.vcxproj
项目从 .NET Framework 4.8 移植到 .NET 6。
MS的指南说:
- 将
属性替换为<TargetFrameworkVersion>
。请务必更改标签和值。<TargetFramework>net8.0</TargetFramework>
好吧,我现在想针对 .NET 6 而不是 .NET 81,但这种修改似乎微不足道。我已在我的
<PropertyGroup Label="Globals">
文件的 .vcxproj
部分尝试了以下元素:
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>.netcoreapp6.0</TargetFramework>
按照另一个答案这两者都会产生以下编译器错误:
您的项目未引用“.NETCoreApp,Version=v6.0”框架。在项目文件的“TargetFrameworks”属性中添加对“.NETCoreApp,Version=v6.0”的引用,然后重新运行 NuGet 恢复。
现在,如果我do使用
<TargetFrameworks>.NETCoreApp,Version=v6.0</TargetFrameworks>
代替上面的<TargetFramework>
元素,编译器会输出以下错误:
NETSDK1013从这里开始,我尝试了两件事:无法识别 TargetFramework 值“”。它可能拼写错误。如果不是,则必须显式指定 TargetFrameworkIdentifier 和/或 TargetFrameworkVersion 属性。
<TargetFrameworks>.NETCoreApp,Version=v6.0</TargetFrameworks>
<TargetFrameworkIdentifier>.NETCoreApp</TargetFrameworkIdentifier>
<TargetFrameworkVersion>6.0</TargetFrameworkVersion>
<TargetFramework>
和
<TargetFrameworks>
:
<TargetFrameworks>.NETCoreApp,Version=v6.0</TargetFrameworks>
<TargetFramework>net6.0</TargetFramework>
我该如何解决这个问题?
1:我知道 .NET 6 的支持期即将结束。但这是一个非常大的项目的一部分,其中包含大量 .NET 6 程序集,并且将在接下来的几周内完全迁移到 .NET 8。在那之前,一切都应该保留在 .NET 6 上。
我们的项目有什么:
<PropertyGroup Label="Globals">
...
<TargetFrameworkVersion>v6.0</TargetFrameworkVersion>
<TargetFramework>net6.0-windows</TargetFramework>
...
以及Debug
和
Release
:
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
...
<CLRSupport>NetCore</CLRSupport>
...
这可以在请注意this(在移植指南中提到,但我一开始没有给予足够的重视......之后出现了一些副作用......)。我们使用这个hack来帮助解决这个问题,但它添加了一些丑陋的代码。
.runtimeconfig.json
应该在编译过程中为您生成。对于加载的第一个 dll 是强制性的。编译期间没有任何影响。