像这样:
一个解决方案(我想这一定是 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 项目,但是您可以引用 .NET 4.5.1 项目。 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 允许您添加引用,但它并不保证可以实际使用库的全部或部分内容。事实上,在添加引用后,您会收到一个警告。您需要验证依赖项是否正常工作,然后您可以在此时抑制警告。
大多数情况下,会让您感到困惑的是特定于平台的 Windows API。例如,System.Drawing
是一个问题,因为 .NET Core 是跨平台的,其中 System.Drawing
使用特定于 Windows 的 API。在某些情况下,只要您的应用与 Windows 保持紧密联系,您仍然可以使用这些不兼容的库。再次以 System.Drawing
为例,有一个 CoreCompat 包允许您使用 .NET Core 项目中的 System.Drawing
,这意味着您可以利用使用 System.Drawing
的库,只要您在 Windows 上构建和运行。如果你试图将你的应用程序带到 Linux,它就会崩溃。不过,您可以使用编译器指令填充专门针对 Linux 和 Mac 的不同代码以进行补偿。
总而言之,这里没有硬性的"is"或“否”答案。您需要进行一些广泛的测试,以确保一切正常。如果确实出现问题,您可能能够使用 Microsoft 的兼容包之一填充支持,但在替换需要这样做的代码之前,您将无法离开 Windows。这为您的升级提供了一些喘息的空间,但不要指望您会获得 .NET Core 的所有 promise 和吸引力,只是因为它允许您添加依赖项。
关于c# - 是否可以让 ASP.NET Core 解决方案包含具有不同目标框架的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52210304/