类型“对象”是在未使用 .Net Core 项目引用的程序集中定义的
本文关键字:引用 项目 程序 程序集 定义 集中 Core Net 对象 未使用 类型 | 更新日期: 2023-09-27 17:56:02
完整的错误是:
类型"对象"是在未引用的程序集中定义的。 您必须添加对程序集"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 应用程序使用。