我有一个简单的.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 回答
在.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 .
.Net Core和.Net 4.0有不同的核心库 . 来自旧.Net库的类型
System.Object
在mscorlib
中定义,显然尚未引用 .如果您确实引用了该库,则可能会得到名称解析错误,因为相同的类型将在相同的名称空间中定义,并且在不同的库中具有相同的类型名称 . 所以是的,这是不允许的 .
编辑:但是,有一种常见的方法称为
Shared project
,你可以阅读它here . 此问题也可能对您有用:.net core classlibrary calling .net framework class library
您也可以尝试创建一个可移植的类库,可以从.Net Core和.Net 4.6库中引用 .
编辑#2:正如@EricErhardt所提到的,您可以使用不同的定位重新编译.Net 4.6库,如果您没有源代码,则可能无法选择 .