.NET Core项目如何引用.NET Framework项目?为什么这是可能的?

17

我有以下项目:

.NET Core 2.0 Web应用程序

.NET Standard 2.0类库 &

.NET Framework 4.5类库。

我将.NET Framework类库的引用添加到ASP.NET Core Web API项目中。看起来它运行得非常好。

我想知道为什么可以将.NET Framework类库项目的引用添加到ASP.NET Core Web API或MVC中?

这不应该只允许在Core项目中添加Standard或Core库的引用吗?这个引用了.NET Framework类库的Core Web项目是否仍然是跨平台的?

更新

根据Phiter的评论:

"如果你将一个.NET Framework库导入到你的项目中,它就不再是跨平台的了,但是如果你想要的话可以自由地这样做。他们之所以允许这样做,是因为你可能想要使用.NET Core并仍然在Windows上运行。"

如果是这个原因,那么如果我想绑定我的项目到.NET Framework并仍然停留在Windows上,为什么我从一开始就要使用Core Web项目呢?

我以为我们使用核心项目是为了跨平台能力,如果不是,.Net Framework并不是更好的选择吗?

更新

mason的评论:

"没有什么好笑的:ASP.NET Core项目不必在.NET Core上运行。它也可以在.NET Framework上运行。

只是因为它被称为“Core”,并不意味着它们有关联。他们本可以把它称为ASP.NET FancyPants,并让它在.NET Core和.NET Framework上运行,你就不会这么困惑了。微软只是在命名方面做得很烂。"

更新(2018年11月12日)

ASP.NET Core 3.0-全面利用.NET Core的首次亮相

根据本月早些时候在.NET博客上宣布的消息,由于.NET Framework的现场更新性质和限制可能会破坏现有应用程序的更改,.NET Framework将少得到更多的新平台和语言功能,这些功能将转移到.NET Core。为确保ASP.NET Core能够充分利用未来.NET Core的改进,从3.0版本开始,ASP.NET Core将仅在.NET Core上运行。从现在开始,您可以将ASP.NET Core简单地视为.NET Core的一部分。

今天在.NET Framework上使用ASP.NET Core的客户可以继续使用2.1 LTS发行版进行全面支持。根据.NET Core支持政策,对2.1的支持和维护将继续到至少2021年8月21日(其被宣布为LTS发行版3年后)。


1
如果您将一个 .net framework 库导入到您的项目中,它就不再是跨平台的了,但如果您想要这样做,您可以自由地这样做。他们允许这样做是因为您可能想要使用 .net core 并仍然在 Windows 上运行,对吧? - Phiter
@Phiter,如果我想将我的项目绑定到.NET Framework并保持在Windows上,为什么我要从一开始就使用Core Web项目?我以为我们使用核心项目是为了跨平台能力,如果不是的话,.Net Framework不是更好的选择吗? - Saeid
1
事实上,这没有任何意义,但他们不会取消你做这种事情的能力,因为每个开发者都有权利做自己的无聊事情。 - Phiter
1
请注意,ASP.NET Core 不一定要在 .NET Core 上运行。它也可以在 .NET Framework 上运行。 - mason
3
这并不好笑。仅仅因为它被称为“Core”,并不意味着它们之间有关联。他们本可以把它命名为ASP.NET FancyPants,让它在.NET Core和.NET Framework上运行,这样你就不会感到困惑了。微软只是很糟糕地给东西命名而已。 - mason
显示剩余3条评论
2个回答

9

这是作为.NET Standard/Core 2.0的一部分新增的。只要.NET Framework dll仅引用.NET Standard中的内容,就会使用类型转发到.NET Core实现。


1
这就是为什么行为被支持的精确原因。我已经在答案和评论中提到过几次,但我建议问题 OP 查看 Immo Landwerth 的 .NET Standard 视频(https://www.youtube.com/watch?v=YI4MurjfMn8&list=PLRAdsfhKI4OWx321A_pr-7HhRNk7wOLLY),以及这个答案链接到的 URL。 - Jamie Taylor
我仍然遇到了这个问题。即使我可以在.NET Core中有一个项目,另一个在.NET Framework中。我需要引用Framework项目以获取.NET Core中的功能,但它会出现错误,因为.NET Core项目无法导入那些库。 - Braden Brown
@BradenBrown 你用的是什么操作系统? - Daniel A. White
@DanielA.White Windows 10。更具体地说,它是一个Nuget包,无法导入。不过我可能做错了什么。 - Braden Brown
@BradenBrown 也许它有不符合 .net 标准的依赖项。 - Daniel A. White
@DanielA.White 那很可能是我遇到的问题。 - Braden Brown

4

我不知道是什么原因让微软允许将 .NET Framework 类库引用到 .NET Core 项目中,但作为一名程序员,我对此感到开心。

你看,让 .NET Core 应用程序引用 .NET Framework 库很有用,因为如果你想从 Windows 开始,并计划在未来跨平台,这样做就很方便。

现在我们处于一个阶段,许多有用的开源库直到本文发布时仍未完全支持 .NET Core,例如 MassTransit 就是其中之一。因此,在开发新软件时,我将使用依赖于这些库的 .NET Core 项目,稍后再更新它们以支持 .NET Core。


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