微软最近宣布 .Net 6.0 版本作为重要版本。我没有找到任何参考资料,说明我们可以在 .NET 6.0 项目中使用旧的 .NET Framework (> 4.7.*) 引用?
比如说,一个 .NET 6 项目会有一个 .NET Framework 4.7.1 的 dll 引用来进行 Windows 应用程序开发吗?
微软最近宣布 .Net 6.0 版本作为重要版本。我没有找到任何参考资料,说明我们可以在 .NET 6.0 项目中使用旧的 .NET Framework (> 4.7.*) 引用?
比如说,一个 .NET 6 项目会有一个 .NET Framework 4.7.1 的 dll 引用来进行 Windows 应用程序开发吗?
使用 .NET Framework(1.0-4.8)编译/面向的程序集可能会使用 .NET Standard 或 .NET Core 中不存在的 API(类型、方法)。
因此,如果您有一个面向 .NET Standard 或 .NET Core 的项目,并且想要引用一个面向 .NET Framework 的程序集,它可能在运行时抛出异常,因为它缺少方法重载或类型。这些类型存在于 Framework DLL 中,但不存在于 .NET Core 运行时程序集中。
如果您知道(通过解释代码或测试,最好两者兼备),面向 Framework 的程序集不使用 .NET Standard 或 .NET Core 中不存在的 API,那么一切都没问题(有关差异,请参见什么是 .NET Core 和 .NET Standard 类库项目类型之间的区别?)。
如果它是一个放置在源代码控制的 lib
文件夹中的程序集,您可以添加一个程序集引用:
<Reference Include="../lib/path/To/Dll.dll" />
<PackageReference Include="Some.Framework.Package" Version="1.0.0" NoWarn="NU1701" />
重新编译程序集以针对 .NET Standard 2.0,并通过 NuGet 进行打包和分发。
这是一个复杂答案的问题。
说实话,很可能你的问题的答案是否定的,因为你有一个非常具体的库在脑海中。真正的答案取决于所涉及的库,但很可能大多数情况下不起作用。
是的,你可以将.NET Framework程序集加载到.NET Core 5和6中。
然而,根据该库的功能以及更重要的是其依赖项(即它想要携带的其他库),对于任何规模的复杂库来说,它可能无法正常工作。
在.NET 5+中可能不存在某些类,甚至只是单个方法重载或属性。根据你访问的.NET Framework的确切部分,它在.NET 5+中可能会完全丢失。
这里link1有更多信息。
你最好的选择可能是尝试:
重新编译库以适配您的特定 .NET 版本(无论是 5 还是 6);重新编译库以针对 .NET Standard 2.1,因为 .NET 5+ 兼容该版本。然而,您可能会遇到相同的问题,因为您将不得不处理这些已更改的位。但至少您会更了解哪些能够正常工作,哪些不能,并有机会修复它。如果这不是您要更改的库,请更换它或尽力而为。我不确定是否始终需要删除“obj”和“bin”目录,但我发现如果您不删除它们,偶尔会生成“project.assets.JSON”文件不正确,导致运行失败。删除它们,然后重新运行命令即可解决问题。