在定位.NET Core时引用旧的(完整.NET Framework)类库

时间:2016-10-28 10:11:39

标签: asp.net-core asp.net-core-mvc .net-core-rc2 asp.net-core-webapi

我正在.Net Core上开发一个Web应用程序,但由于.Net Core仍处于开发阶段,因此使用的某些库尚未构建在Core上。

我知道我可以在我的应用程序中使用.Net 4.6来使用旧库但是我不确定在我的应用程序中使用新的.Net Core功能实际上有什么变化。

我知道这种方式我正在失去多平台功能但我实际上并不需要它,因为我需要继续使用API​​和MVC统一管道,集成依赖项Ingnection容器和其他.Net Core新功能< / p>

通过定位旧框架,这是不可能的?

2 个答案:

答案 0 :(得分:2)

简短而简单的答案是:您无法在.NET Core项目中引用.NET Framework 4.x库,原因很简单,因为它有两个不同的框架和许多可用的API。 .NET Core中没有.NET 4.5 / 4.6。

但也有一些例外。

  1. 如果您的类库确实定位portable-net45-win8,则可以使用它。

    因为此配置文件确保API表面与.NET Core使用的表面匹配,并且基于System.Runtime。为了能够在.NET Core应用程序或.NET Core类库中导入此类包/库,您需要添加

    "frameworks:" {
      "netcoreapp1.0": {
        "dependencies : { },
        "imports": [ "dotnet5.6", "portable-net45-win8" ] 
      }      
    }
    
  2. 如果您的班级图书馆定位dnx5x / dotnet5.x,则可以按照与上述相同的方式使用

  3. 如果你真的很确定,你的班级图书馆不会使用 ANY 不支持的API和 none #39; s依赖项使用 ANY 不支持的API

    然后你可以在技术上使用相同的技巧,但我建议从不这样做,因为它将允许你导入任何.NET 4.x库(甚至2.0个)和你&# 39;永远不知道它是否得到支持。 不要这样做永远

    相反,将类库转换为可移植类库并定位netstandard1.x(取决于之前使用的.NET Framework版本,请参阅此matrix)。

    例如,如果您的类库以前面向.NET Framework 4.5.1,则将其转换为netstandard1.2。如果有关于缺少API的任何错误,那么它使用的是.NET Core不支持的API。您必须解决此问题(使用netstandard1.2预编译器指令将其从#if !NETSTANDARD1_2版本中删除或尝试更高的netstandard版本。您还可以在新项目中定位两个目标.json absed Class库。

答案 1 :(得分:0)

是的,这是可能的。 我有一个针对NHibernate的项目(取决于完整的.NET Framework)以及一些旧格式的类库项目(csproj)。

我没有问题地使用DI和MVC / API。