类型 'Object' 是在未使用 .Net Core 项目引用的程序集中定义的



完整的错误是:

类型"对象"是在未引用的程序集中定义的。 您必须添加对程序集"mscorlib, version=4.0.0.0, ..."的引用

我尝试实例化仍在.Net 4.5程序集中的MongoClient,如下所示:

var client = new MongoDB.Driver.MongoClient(@"mongodb://localhost:27017/");
if (client == null)
{
    return;
}

生成错误位于client == null行上。

我的项目.json如下:

{
  "version": "1.0.0-*",
  "dependencies": {
    "NETStandard.Library": "1.6.0",
    "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
    "MongoDB.Driver": "2.2.4",
    "MongoDB.Driver.Core": "2.2.4",
    "MongoDB.Bson": "2.2.4"
  },
  "frameworks": {
    "netstandard1.6": {
      "imports": "net46"
    }
  }
}

我的 VM 将 Win10 作为操作系统,因此我只安装了 .Net 46x。

我已经删除了 dnxcore50 的导入,并将其替换为完整的 net46 导入。我做错了什么吗?

我通过删除netstandard1.6框架并将其替换为"net46"来解决它。我的印象是,使用 netstandard1.6,我可以导入 .Net 4.6 框架并删除 dnxcore50 导入,然后它应该与完整的库一起运行,如下所述: https://github.com/dotnet/corefx/blob/master/Documentation/architecture/net-platform-standard.md#mapping-the-net-platform-standard-to-platforms

目前,我已经将我的项目更改为仅针对完整的.Net框架。一旦.Net Core Mongo驱动程序可用,我就可以将其定位为netcoreapp。

我的项目.json现在是:

{
  "version": "1.0.0-*",
  "dependencies": {
    "NETStandard.Library": "1.6.0",
    "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
    "MongoDB.Driver": "2.2.4",
    "MongoDB.Driver.Core": "2.2.4",
    "MongoDB.Bson": "2.2.4"
  },
  "frameworks": {
    "net46": { }
  }
}

感谢@Nick Acosta 指出我:.NET Core 和 .Net 4.5.2 使用的通用类库

更新

我收到了Eric Melino在CoreFX回购上的回复:https://github.com/dotnet/corefx/issues/9885#issuecomment-231194545

您的第一个版本:

"框架":{ "网络标准1.6":{ "进口": "NET46" } }

基本上是说:"为我建立一个针对网络标准 1.6 的库, 但也让我参考为 Net46 构建的东西,即使它不是 兼容。事实证明,程序集不兼容,因此您 无法编译。问题是MongoClient引用了一个 驻留在 mscorlib.dll 中的 System.Object 类型。NETStandard.App, 当瞄准网络标准1.6时,将拉入一个 System.Runtime.dll它引用驻留的 System.Object 类型 在 System.Runtime.dll 中。没有 mscorlib 门面可以 协调此差异,因此会出现编译错误。

如果您正在为 .NET Framework 构建,请使用您的第二个应用程序,即

"框架": { "net46": { }, }.

如果要为 .NET Core 生成,则需要 MongoClient与netstandard兼容。然后这可能是 从 .NET Framework 应用程序使用。

最新更新