如何在.NET Core项目中引用.NET Framework项目?

我真的很想开始使用.NET Core并慢慢地将应用程序和库迁移到它。 但是,我无法实际升级我的整个代码库以使用.NET Core,然后在生产中完成测试和部署大量应用程序的过程。

例如,如果我创建一个新的.NET Core应用程序并尝试引用我的一个.NET Framework项目,我会得到以下结果:

不支持以下项目作为参考: – Foobar.NetFramework具有与当前项目Foobar.NetCore中的目标不兼容的目标框架。

Foobar.NetCore:.NETCoreApp,Version = v1.0

Foobar.NetFramework:.NETFramework,Version = v4.5

是否可以创建新的.NET Core应用程序并引用我现有的.NET Framework库? 如果是这样,这样做的过程是什么? 我花了几个小时浏览微软的文档,并在GitHub上搜索他们的问题,但我找不到任何关于如何实现这一点的官方或他们对这个过程的长期愿景。

是的,我们目前正在尝试同样的事情。 诀窍是确保您支持相同的.NET框架。 在project.json文件中,确保框架与您希望包含的项目框架相匹配。 例如:

"frameworks": { "net46": { --This line here <<<< "dependencies": { "DomainModel": { "target": "project" }, "Models": { "target": "project" } } } }, 

仅供参考:您可能需要更改.NET Core或旧项目的框架才能实现此目的。 只需编辑project.json文件即可更改.NET Core,如上所示。 通过右键单击项目并打开属性,您可以在.NET项目中使用相同的内容。 在那里改变框架级别。

一旦匹配了两个项目框架,那么您应该能够包含它们。 祝好运!

老问题,但随着.NetStandard 2.0和.netcore 2.0以及vs2017.3的发布,游戏发生了变化。

您可以将完整的.NET Framework(TFM)与.NetCore 2.0一起使用,但是如何使用?

  1. 在Visual Studio 2017.3中,您可以直接从.NetCore2项目中引用完整.NET Framework(任何版本)。

  2. 您可以构建.NetStandard2类库并引用您的TFM。 然后从.NetCore2项目中引用您的.NetStandard2库。

例如,从.NetStandard2引用json.net net45。 浏览到该文件夹​​并选择版本net45(不是netstandard1.3)

请参阅下图中的相关性,如您所见,没有黄色警告。

在此处输入图像描述

  1. 即使Nuget库尚未准备好移植到.Netstandard 2,您也可以使用符合net461的库中的任何API。

使用链接引用.NET Core 2 / Standard 2.0公告:

.NET Core 2.0能够自由引用为.NET Framework 4.6.1版本构建的库

但是,如果某些库尝试使用.NET Core上不可用的API方法,则它们可能会在运行时失败

参考: Linux上的.NET Core App目标.NET framework 4.5.2

需要使用不适用于.NET Core的第三方.NET库或NuGet包

因此,只有在库或NuGet包使用.NET Standard / .NET Core中不可用的技术的情况下,才需要使用.NET Framework。

参考: 在.NET Core和.NET Framework之间为服务器应用程序选择

您现在可以使用Visual Studio 2017 15.3从.NET标准库引用.NET Framework库。 此function可帮助您将.NET Framework代码随时间迁移到.NET Standard或.NET Core(从二进制文件开始,然后移至源代码)。 对于.NET Framework库不再可访问或丢失源代码的情况,它也很有用,使其仍可用于新场景。

参考: 宣布.NET Core 2.0