0

Mongo C# 드라이버 (버전 1.4.2)가 NLog.LogManager.GetCurrentClassLogger()에서 NullReferenceException을 throw합니다.
릴리스 빌드에서만 오류가 발생합니다. 디버그 빌드로 잘 작동합니다. 이 NLog vs. StructuremapMongo C# 드라이버 Null.LogManager.GetCurrentClassLogger()가있는 NullReferenceException

스택 추적,

System.NullReferenceException 관련이 있는지
확실하지 NLog.LogManager.GetCurrentClassLogger에서
() lambda_method (폐쇄) MongoDB.Bson.Serialization에서
에서
. mongo-csharp-driver \ Bong \ Serialization \ BsonClassMap.cs : 429
at MongoDB.Bial.Serialization.BsonClassMapSerializer.Deserialize (BsonReader bsonReader, Type nominalType, BsonClassMap.CreateInstance() 유형 실제 유형, IBsonSeri mongo-csharp-driver \ Bson \ Serialization \ BsonClassMapSerializer.cs : 줄 111
at MongoDB.Bial.Serialization.BsonClassMapSerializer.Deserialize (BsonReader bsonReader, 유형 nominalType, IBsonSerializationOptions 옵션)) BongClassMapSerializer.cs : 줄 78
at MongoDB.Bson.Serialization.BsonSerializer.Deserialize (BsonReader bsonReader, 유형 nominalType, IBsonSerializationOptions 옵션)에서 C : \ work \ 10gen \ mongodb \ mongo-csharp- 드라이버 \ Bson \ Serialization \ C : \ work \ 10gen \ mongodb \ mongo-csharp-driver \ Bson \ Serialization \ BsonSerializer.cs : 라인 223
at MongoDB.Driver.Internal.MongoReplyMessage 1.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 메시지) work \ 10gen \ mongodb \ mongo-csharp-driver \ Driver \ Core \ MongoCursorEnumerator.cs : li MongoDB.Driver.MongoCursorEnumerator 1.GetFirst() in C:\work\10gen\mongodb\mongo-csharp-driver\Driver\Core\MongoCursorEnumerator.cs:line 251
at MongoDB.Driver.MongoCursorEnumerator
1.MoveNext() C시 NE 296
: \ 작업 \ 10gen \ MongoDB를 \ 몽고-CSHARP 드라이버 \ 드라이버 \ 코어 \의 MongoCursorEnumerator.cs : System.Linq.Enumerable에서 선 141
.FirstOrDefault [TSource] (IEnumerable`1 source)

답변

1

예외는 실제로 C# 드라이버에서 throw되는 것이 아니라 드라이버 외부의 일부 코드에 의해 throw됩니다.

스택 추적을 보면 C# 드라이버가 데이터베이스의 문서를 읽고 deserialize하려고 시도하고 있음을 알 수 있습니다 (스택 추적에서 BsonSerializer.Deserialize 참조). 비 직렬화의 일부로 클래스의 인스턴스를 만들어야합니다 (스택 추적에서 BsonClassMapSerializer.CreateInstance 참조). 객체의 생성자 (또는 객체의 클래스의 정적 생성자)가 NullReferenceException을 던지고 있습니다.

여기에서 어떤 클래스를 사용하고 있는지 알 수 있으며 소스 코드를보고 NLog.LogManager (이 아닌 C# 드라이버의)가 NullReferenceException을 던지는 이유를 알 수 있습니다.

+0

고맙습니다 Robert! 이 문제는 NLog 호출 인 NLog.LogManager.GetCurrentClassLogger()로 인해 발생했습니다. 그래서 그것을 NLog.LogManager.GetLogger ("ClassName")로 변경하면 잘 동작합니다. 특정 시나리오에서 NLog.LogManager.GetCurrentClassLogger()의 NLog 구현에 문제가 있습니다. – vetti