【问题标题】:Mongo C# driver NullReferenceException with NLog.LogManager.GetCurrentClassLogger()带有 NLog.LogManager.GetCurrentClassLogger() 的 Mongo C# 驱动程序 NullReferenceException
【发布时间】:2015-11-09 10:09:20
【问题描述】:

Mongo C# 驱动程序(1.4.2 版)从 NLog.LogManager.GetCurrentClassLogger() 抛出 NullReferenceException
错误仅在发布版本中发生。与调试版本一起工作正常。
不确定是否与NLog vs. Structuremap 有关

堆栈跟踪,

System.NullReferenceException
在 NLog.LogManager.GetCurrentClassLogger()
在 lambda_method(闭包)
在 C:\work\10gen\mongodb\mongo-csharp-driver\Bson\Serialization\BsonClassMap.cs: 429 行中的 MongoDB.Bson.Serialization.BsonClassMap.CreateInstance()
在 C:\work\10gen\mongodb\mongo-csharp-driver\Bson\Serialization\BsonClassMapSerializer.cs: 行 111 br> 在 C:\work\10gen\mongodb\mongo-csharp-driver\Bson\Serialization\BsonClassMapSerializer.cs:line 78 中的 MongoDB.Bson.Serialization.BsonClassMapSerializer.Deserialize(BsonReader bsonReader, TypenominalType, IBsonSerializationOptions 选项) 在 C:\work\10gen\mongodb\mongo-csharp-driver\Bson\Serialization\BsonSerializer.cs:line 223 中的 MongoDB.Bson.Serialization.BsonSerializer.Deserialize(BsonReader bsonReader, TypenominalType, IBsonSerializationOptions 选项) 在 C:\work\10gen\mongodb\mongo-csharp-driver\Driver\Core\MongoCursorEnumerator.cs:line 296 中的 MongoDB.Driver.Internal.MongoReplyMessage1.ReadFrom(BsonBuffer buffer, IBsonSerializationOptions serializationOptions) in C:\work\10gen\mongodb\mongo-csharp-driver\Driver\Internal\MongoReplyMessage.cs:line 105
at MongoDB.Driver.Internal.MongoConnection.ReceiveMessage[TDocument](BsonBinaryReaderSettings readerSettings, IBsonSerializationOptions serializationOptions) in C:\work\10gen\mongodb\mongo-csharp-driver\Driver\Internal\MongoConnection.cs:line 442
at MongoDB.Driver.MongoCursorEnumerator
1.GetReply(MongoConnection 连接,MongoRequestMessage 消息)
在 C:\work\10gen\mongodb\mongo-csharp-driver\Driver\Core\MongoCursorEnumerator.cs: 141 行中的 MongoDB.Driver.MongoCursorEnumerator1.GetFirst() in C:\work\10gen\mongodb\mongo-csharp-driver\Driver\Core\MongoCursorEnumerator.cs:line 251
at MongoDB.Driver.MongoCursorEnumerator
1.MoveNext()
在 System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 源)

【问题讨论】:

    标签: mongodb linq nullreferenceexception nlog mongodb-.net-driver


    【解决方案1】:

    异常实际上并不是由 C# 驱动程序引发的,而是由驱动程序外部的某些代码引发的。

    查看堆栈跟踪,我们可以看到 C# 驱动程序已经从数据库中读取了一个文档并试图反序列化它(参见堆栈跟踪上的 BsonSerializer.Deserialize)。作为反序列化的一部分,它需要创建您的类的实例(请参阅堆栈跟踪上的 BsonClassMapSerializer.CreateInstance)。对象的构造函数(或者可能是对象类的静态构造函数)正在抛出 NullReferenceException。

    您可能知道您在这里使用的是什么类,并且可以查看您的源代码以找出为什么 NLog.LogManager(它不是 C# 驱动程序的一部分)抛出 NullReferenceException。

    【讨论】:

    • 谢谢罗伯特!问题是由 NLog 调用 NLog.LogManager.GetCurrentClassLogger() 引起的。因此将其更改为 NLog.LogManager.GetLogger("ClassName") 并且工作正常。这是在某些场景下 NLog.LogManager.GetCurrentClassLogger() 的 NLog 实现的问题。
    猜你喜欢
    • 2014-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多