繁体   English   中英

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

[英]How do I reference a .NET Framework project in a .NET Core project?

我真的很想开始使用 .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 上搜索他们的问题,但我找不到任何关于如何实现这一目标或他们对这个过程的长期愿景的官方信息。

老问题,但随着 .NetStandard 2.0 和 .netcore 2.0 和 vs2017.3 的发布,游戏已经改变了。

您可以在 .NetCore 2.0 中使用完整的 .NET Framework (TFM),但如何使用?

  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 库或不适用于 .NET Core 的 NuGet 包

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

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

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

参考: 宣布 .NET Core 2.0

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM