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

时间:2016-07-01 14:38:32

标签: c# .net asp.net-core .net-core

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

3 个答案:

答案 0 :(得分:11)

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

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

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

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

答案 1 :(得分:7)

旧问题,但随着.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库。

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

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

    enter image description here

    1. 即使Nuget库尚未准备好移植到.Netstandard 2,您也可以使用符合net461的库中的任何API。
    2. 使用链接引用.NET Core 2 / Standard 2.0公告:

        

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

           

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

      参考:.NET Core App target .NET framework 4.5.2 on Linux

        

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

           

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

      参考:Choosing between .NET Core and .NET Framework for server apps

        

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

      参考:Announcing .NET Core 2.0

答案 2 :(得分:-2)

如果使用某些网络框架dll,网络核心不支持system.Web.Services。忘记使用它。没有选择。