c# - 是否可以让 ASP.NET Core 解决方案包含具有不同目标框架的项目?

标签 c# asp.net .net asp.net-core .net-framework-version

像这样:

一个解决方案(我想这一定是 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/

相关文章:

.net - 运行时的 TableLayoutPanel 行和列

c# - 是否可以保证 AsyncCallbacks 始终在主线程上执行?

c# - 在 C# 中转换为泛型类型

javascript - 从 Asp :Menu 运行每个 MenuItem 的 javascript 函数

c# - 不能为负数并避免在文本框中输入字母

c# - 什么会导致 throw 重置调用堆栈(我使用的是 "throw",而不是 "throw ex")

c# - Visual Studio Code : How to see all classes inherited from a base class or interface?

c# - ashx 请求中的 Session.SessionId 持久化

asp.net - 在没有 ViewState ASP.Net 的情况下获取当前页面的 HTML

c# - 关于 Task.Start() 、 Task.Run() 和 Task.Factory.StartNew() 的用法