Like so:
一种解决方案(我认为这一定是 ASP.NET Core?)
- 项目1.目标框架是.NET Core 2.1
- 项目2。目标框架是.NET Framework 4.5.1。处理数据访问的类库。我问的原因是项目 2 包含我们目前没有时间迁移的遗留依赖项。
该解决方案与所使用的目标框架无关。目标框架适用于项目,因此您可以在解决方案中为每个项目设定不同的目标,并且从解决方案的角度来看,这对于抢占并不重要。
当您具有项目依赖性时就会出现问题。为了依赖于针对不同框架的项目,所使用的所有框架必须以某种方式彼此兼容。例如,您可以从 .NET 4.7 项目引用 .NET 4.6 项目,因为最终 .NET 4.7 是 4.6 的超集。
更直接地谈论 .NET Core 和您的场景,特别是,不,您不能从 .NET Core 2.1 项目引用 .NET 4.5.1 项目,but您可以参考.NET 4.6.1项目。这里的问题是 .NET Core 处理 .NET Framework 依赖项的能力依赖于 .NET Standard。 .NET Standard 2.0 是第一个支持 .NET Core 和 .NET Framework 之间互操作的版本,至少需要 .NET Core 2.0 和 .NET Framework 4.6.1。如果您可以将该项目定位到至少 4.6.1,那么是的,您可以引用它。
但是,.NET Framework 包含 .NET Standard 不包含的内容,因此 .NET Core 也不包含这些内容。尽管 Visual Studio 允许您添加引用,但它并不保证该库的全部甚至部分内容都可以actually被利用。事实上,在添加引用后,您会收到有关此效果的警告。您需要验证依赖项是否正常工作,然后您可以在此时抑制警告。
大多数情况下,会让您陷入困境的是特定于平台的 Windows API。例如,System.Drawing
是一个问题,因为 .NET Core 是跨平台的,其中System.Drawing
使用特定于 Windows 的 API。在某些情况下,只要您的应用程序与 Windows 保持紧密联系,您仍然可以使用这些不兼容的库。再次使用System.Drawing
例如,有一个 CoreCompat 包允许您使用System.Drawing
来自 .NET Core 项目,这意味着您可以利用使用以下内容的库System.Drawing
只要你构建并运行在 Windows 上。如果您尝试将您的应用程序移植到 Linux,它就会崩溃。不过,您可以使用编译器指令专门为 Linux 和 Mac 填充不同的代码来进行补偿。
长话短说,这里没有硬性的“是”或“否”答案。您需要进行一些广泛的测试,以确保一切正常工作。如果事情真的破裂了,你may能够通过 Microsoft 的兼容包之一进行填充支持,但在替换需要该功能的代码之前,您将无法离开 Windows。这为您的升级提供了一些喘息的空间,但不要指望您会仅仅因为它允许您添加依赖项而获得 .NET Core 的所有承诺和吸引力。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)