关于c#:如何在.NET Core项目中引用.NET Framework项目?

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

我真的很想开始使用.NET核心并慢慢地将应用程序和库迁移到它。但是,我不能真正地将整个代码库升级为使用.NET核心,然后在生产中测试和部署大量应用程序。

例如,如果我创建一个新的.NET核心应用程序并尝试引用我的一个.NET框架项目,我会得到以下信息:

0

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

  • 简短的回答:暂时不能。
  • 这个问题可能对您有所帮助:stackoverflow.com/questions/39041097/…


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

1
2
3
4
5
6
7
8
9
10
11
12
"frameworks": {
   "net46": {  --This line here <<<<
     "dependencies": {
       "DomainModel": {
         "target":"project"
        },
       "Models": {
         "target":"project"
        }
      }
    }
  },

仅供参考:您可能需要更改.NET核心或旧项目的框架来实现这一点。可以通过编辑上面所示的project.json文件来更改.NET核心。在.NET项目中也可以这样做,方法是右键单击该项目并打开属性。在那里更改框架级别。

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

  • 而且,具体来说,因为我认为这可能会令人困惑,这是在完整的.NET框架上运行ASP.NET核心,而不是在已知的.NET核心上运行ASP.NET核心。.NET框架和.NET核心之间的区别很重要,因为第一个是根据我们过去拥有的内容运行最新的ASP.NET,另一个是在跨平台的较小的.NET组件上运行。
  • 我对project.json模式还是个新手,而且文档似乎很少。如果我有一个名为"my.test.project"的项目,我如何在上面给出的示例中添加它?
  • 当我试图将依赖项添加到project.json文件中时,我得到以下信息:无法解析".netframework,version=v4.6"的"my.test.project(>=1.0.0)"。如果这有什么区别的话,这个项目就不是nuget包了。
  • @布莱德雷,你有什么想法吗?
  • @如果您使用的是Visual Studio,请尝试像以前一样添加它:单击"引用"项并说"添加引用"。IDE将在project.json中为您创建条目。如果您的框架项目是.net46,它应该放在net46下。
  • @Bradrem谢谢你的回复。当我尝试这样做的时候,我会在我的问题中发现错误。我改变了我试图引用的项目,用4.6而不是4.5,但这似乎没有什么区别(我也犯了同样的错误)。
  • @我制作了一个Github报告,AspNetCoreWithFrameworkLibrary,它演示了向ASP.NET核心Web应用程序添加框架库的基础知识。
  • @Bradrem Great Github,我刚尝试过,虽然这似乎不适用于核心WebAPI项目,但很不幸,你能评论一下吗?谢谢
  • @当我更改框架时,它似乎不起作用。它显示了我创建的新.NET框架核心应用程序的错误。它也无法添加引用。


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

您可以将完整的.NET框架(tfm)与.netcore 2.0一起使用,但如何使用呢?

  • 在Visual Studio 2017.3中,可以直接从.netcore2项目中引用完整的.NET框架(任何版本)。

  • 您可以构建.netstandard2类库并引用您的TFM。然后从.netcore2项目中引用.netstandard2库。

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

    请参见下图中的依赖项,如您所见,没有黄色警告。

    enter image description here

  • 即使nuget库尚未准备好移植到.netstandard 2,也可以使用库中符合net461的任何API。
  • 引用带有链接的.NET Core 2/Standard 2.0发布:

    0

    参考:Linux上的.NET核心应用程序目标.NET Framework 4.5.2

    A need to use third-party .NET libraries or NuGet packages not available for .NET Core

    So only in cases where the libraries or NuGet packages use technologies that aren't available in .NET Standard/.NET Core, you need to use the .NET Framework.

    参考:在.NET核心和.NET框架之间选择服务器应用程序

    You can now reference .NET Framework libraries from .NET Standard libraries using Visual Studio 2017 15.3. This feature helps you migrate .NET Framework code to .NET Standard or .NET Core over time (start with binaries and then move to source). It is also useful in the case that the source code is no longer accessible or is lost for a .NET Framework library, enabling it to be still be used in new scenarios.

    参考:宣布.NET核心2.0