首页 文章

从.Net Core应用程序调用.Net Framework 4(或Mono)程序集

提问于
浏览
7

我有一个简单的.Net Core Console应用程序在同一解决方案中引用.Net Framework 4.6.2项目 . 当我构建时,我收到以下错误:

错误CS0012:类型“对象”在未引用的程序集中定义 . 您必须添加对程序集'mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'的引用 .

我想做一些不允许的事吗?

有没有办法从.Net Core应用程序引用.Net Framework 4.6(或Mono)程序集(或P / Invoke它)?

使用Visual Studio 2017,.Net Core 1.1

2 回答

  • 1

    在.NET Core 1.x中,不允许引用.NET Framework 4.6(或Mono)程序集 . .NET Core 1.x和.NET Framework是两个不同的运行时,它们的类型不混合 - 就像构建错误消息所说的那样 .

    相反,您可以做的是重新编译针对".NET Standard"的.NET Framework 4.6程序集 . Read more about .NET Standard . 编译.NET Standard库允许该库在.NET Framework,Mono或.NET Core上运行 . 另一个选择是多目标.NET Framework 4.6程序集,因此它为.NET Framework 4.6和.NET Core 1.1构建 . 如果.NET标准不支持您的库所需的API,则只应执行此操作 . 这与@ VMAtm的答案大致相同,但你可以在VS 2017中使用单个.csproj来完成 .

    好消息是,.NET Core 2.0支持您尝试做的事情,即slated for release later this year .

  • 8

    .Net Core和.Net 4.0有不同的核心库 . 来自旧.Net库的类型 System.Objectmscorlib 中定义,显然尚未引用 .

    如果您确实引用了该库,则可能会得到名称解析错误,因为相同的类型将在相同的名称空间中定义,并且在不同的库中具有相同的类型名称 . 所以是的,这是不允许的 .

    编辑:但是,有一种常见的方法称为 Shared project ,你可以阅读它here . 此问题也可能对您有用:

    .net core classlibrary calling .net framework class library

    您也可以尝试创建一个可移植的类库,可以从.Net Core和.Net 4.6库中引用 .

    当您的公共代码与平台无关时,以及可以将特定于平台的代码排除在外的可重用库时,可移植类库非常有用 .

    编辑#2:正如@EricErhardt所提到的,您可以使用不同的定位重新编译.Net 4.6库,如果您没有源代码,则可能无法选择 .

相关问题