“对象”类型是在未引用.Net Core项目的程序集中定义的

时间:2016-07-07 11:36:54

标签: c# .net mongodb-.net-driver .net-core

完整的错误是:

  

“Object”类型在未引用的程序集中定义。   您必须添加对程序集'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行。

我的project.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导入。我做错了吗?

1 个答案:

答案 0 :(得分:4)

我通过删除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。

我的project.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指点我:A common class library consumed by both .NET Core and .Net 4.5.2

<强>更新

我收到了Eric Mellino对CoreFX Repo的回复:https://github.com/dotnet/corefx/issues/9885#issuecomment-231194545

  

您的第一个版本:

     

&#34;框架&#34;:{       &#34; netstandard1.6&#34;:{         &#34;进口&#34;:&#34; net46&#34;       }}

     

基本上是说:&#34;为我建立一个目标网络标准1.6的图书馆,   还让我参考为net46构建的东西,即使它不是   。兼容&#34;事实证明,装配是不兼容的,所以你   无法编译。问题是MongoClient引用了一个   驻留在mscorlib.dll中的System.Object类型。 NETStandard.App,   当目标netstandard1.6,将拉入a   System.Runtime.dll,它引用驻留的System.Object类型   在System.Runtime.dll中。没有mscorlib外观可以   协调这种差异,这样就会出现编译错误。

     

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

     

&#34;框架&#34;:{&#34; net46&#34;:{},}。

     

如果要为.NET Core构建,则需要一个版本的   与netstandard兼容的MongoClient。这可能是   从.NET Framework应用程序中使用。