.NET Core 5.0程序集能否使用以.NET Framework 4.8为目标的程序集?

6

我的C#程序集当前全部针对.NET Core 3.1。它们都使用我针对.NET Framework 4.8的C++ / CLI程序集(称之为“MySdk”)。这个过程很顺利。

今天,我尝试将C#程序集更新到.NET 5.0。突然间,它们甚至看不到已经构建好且就在那里的.NET FW 4.8“ MySdk”程序集。构建过程会给出以下输出:

> 2>------ Build started: Project: MyApp.Core, Configuration: Debug x64
> ------ 2>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(2123,5):
> warning MSB3245: Could not resolve this reference. Could not locate
> the assembly "MySdk". Check to make sure the assembly exists on disk.
> If this reference is required by your code, you may get compilation
> errors.

明显的解决方案是将C++/CLI程序集更新到.NET 5,我希望能尽快完成,但我不确定是否可行。

但假设现在没有这个选项。 .NET 5程序集是否可以使用.NET FW 4.8程序集?这是否有效?还有其他什么方法可以使我的.NET 5程序集看到和使用它?


2
不,.NET 5是.NET Core 5。 - Panagiotis Kanavos
那么为什么相同程序集的.NET Core 3.1版本可以与.NET Framework 4.8程序集完美兼容呢? - Joe
你是否百分之百确定你的C++/CLI项目是针对Framework而不是Core?因为根据我所知道的一切,无论版本如何,Core都不应该能够引用Framework C++/CLI。 - Ian Kemp
我正在使用的是.NET目标框架版本4.8,其路径为“项目 >> 设置 >> 高级 >> .NET目标框架版本”。同时,我正在使用一些System::Windows::Media中未包含在任何.NET Core或.NET 5兼容包中的类型。 - Joe
我应该补充说明,我正在使用NuGet的“Microsoft.Windows.Compatibility”包与这个C++/CLI程序集一起实现。刚才尝试将其从3.1升级到5.0.0,但没有帮助。C#程序集仍然看不到4.8程序集。 - Joe
1
是的,.Net 5.0可以使用4.8程序集。但如果程序集使用了许多不兼容核心的其他引用,则需要小心。当我混合使用一个为.Net 4.8使用Newtonsoft的程序集时,遇到了问题,dll被混合在一起。 - hal9000
1个回答

16
我的困惑竟然是如此愚蠢,以至于我感到难为情,但为了防止其他人犯同样的错误,我将其发布出来。当你将一个.NET Core 3.1应用程序升级到.NET 5.0时,默认的生成输出子文件夹会从"netcoreapp3.1"变为"net5.0-windows"。但我的生成脚本将单独构建的C++ / CLI程序集复制到了旧的".NET Core 3.1"子文件夹中(即"netcoreapp3.1")。换句话说,这与兼容性无关,该程序集被复制到了错误的位置。因此,我的问题的答案是“是”。

2
间接地,你已经回答了我的好奇心,即.NET 5是否可以引用4.8 dll。谢谢。这是我在必应搜索“can .net 3.1 consume .net 4.8 dlls?”中排名第二的结果。 - Dale Barnard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接