完整的错误是:
“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导入。我做错了吗?
答案 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应用程序中使用。