c# 对象引用未设置为对象的实例(堆栈跟踪中未提及空引用)
c# object reference not set to an instance of an object (no mention of null reference in stack trace)
在发布模式下 运行 宁我的 windows 服务时,我收到 "Object reference not set to an instance of an object" 错误(请注意,正如您从我的堆栈跟踪中看到的那样,它没有提到与 NullReference 有关的任何事情都让我更加困惑)。每次我 运行 在调试模式下,代码工作得很好,但是一旦我构建它以在服务器上发布并启动它,它就会失败并出现对象引用错误。请参阅下面的堆栈跟踪,然后在下面查看我的代码;
=================================================================================
Error Message: [EventQueueBulkProcessingHandler] Failed to process events
Stack Trace:
Error Message (INNER EXCEPTION LEVEL 1): Object reference not set to an instance of an object.
Stack Trace (INNER EXCEPTION LEVEL 1):
at Voicebox.EventTriggers.Processing.Preparation.EventContactsFilter.Filter(ContactsModel contacts, ContactsFilterModel contactsFilterModel, Int32 clientId) in D:\Websites\VoiceboxTest\Voicebox\VoiceBox.EventTriggers\Processing\Preparation\EventContactsFilter.cs:line 24
at Voicebox.EventTriggers.Processing.Preparation.TriggerActionDetailsBuilder.CreateTriggerActionDetails(Trigger trigger, ITriggerEvent triggerEvent) in D:\Websites\VoiceboxTest\Voicebox\VoiceBox.EventTriggers\Processing\Preparation\TriggerActionDetailsBuilder.cs:line 48
at Voicebox.EventTriggers.Processing.Handlers.UserEventsHandler.<>c__DisplayClass6_0.<MapEventsToTriggers>b__0(Trigger t, ITriggerEvent e) in D:\Websites\VoiceboxTest\Voicebox\VoiceBox.EventTriggers\Processing\Handlers\UserEventsHandler.cs:line 62
at Voicebox.EventTriggers.Helpers.PermutationsHelper.<>c__DisplayClass0_1`3.<Permutations>b__1(TB b) in D:\Websites\VoiceboxTest\Voicebox\VoiceBox.EventTriggers\Helpers\PermutationsHelper.cs:line 11
at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
at System.Linq.Enumerable.<SelectManyIterator>d__17`2.MoveNext()
at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
at System.Linq.Enumerable.<SelectManyIterator>d__17`2.MoveNext()
at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
at Voicebox.EventTriggers.Processing.Handlers.UserEventsHandler.<HandleAsync>d__5.MoveNext() in D:\Websites\VoiceboxTest\Voicebox\VoiceBox.EventTriggers\Processing\Handlers\UserEventsHandler.cs:line 37
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Voicebox.EventTriggers.Processing.EventQueueBulkProcessingHandler.<ProcessEventsGrouppedByClient>d__8.MoveNext() in D:\Websites\VoiceboxTest\Voicebox\VoiceBox.EventTriggers\Processing\EventQueueBulkProcessingHandler.cs:line 107
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Voicebox.EventTriggers.Processing.EventQueueBulkProcessingHandler.<ProcessInternal>d__6.MoveNext() in D:\Websites\VoiceboxTest\Voicebox\VoiceBox.EventTriggers\Processing\EventQueueBulkProcessingHandler.cs:line 52
=================================================================================
所以离开上面的堆栈跟踪,它说问题出在文件 EventContactsFilter 的第 24 行。这对我来说毫无意义,因为这是列表的初始化。见下面的代码;
// this is the line 24 which the stack trace points too
List<string> filterExpressions = new List<string>();
foreach (var model in contactsFilterModel.Criteria)
{
string fieldName = GetFieldName(contacts.ListId, model.FieldID, clientId);
FieldType fieldType = GetFieldType(model);
FilterExpression FilterExpression = ExpressionBuilder.GetFilterExpression(fieldName, model, fieldType);
var expression = FilterExpression.sqlExpression;
filterExpressions.Add(expression);
}
如您所见,错误是在创建新列表时抛出的,经过许多小时或在网上搜索后,我无法找出可能导致此问题的原因。如果有人能够提供帮助,我将永远欠你的债!!
我不太确定问题出在 List<string>
声明上。请在该声明周围使用 try-catch
,并查看实际的错误消息是什么。
我的直觉告诉我问题不存在。也许在那条线之上或之下。我的猜测是foreach
。无论哪种方式,try-catch
该代码 :)
在发布模式下 运行 宁我的 windows 服务时,我收到 "Object reference not set to an instance of an object" 错误(请注意,正如您从我的堆栈跟踪中看到的那样,它没有提到与 NullReference 有关的任何事情都让我更加困惑)。每次我 运行 在调试模式下,代码工作得很好,但是一旦我构建它以在服务器上发布并启动它,它就会失败并出现对象引用错误。请参阅下面的堆栈跟踪,然后在下面查看我的代码;
=================================================================================
Error Message: [EventQueueBulkProcessingHandler] Failed to process events
Stack Trace:
Error Message (INNER EXCEPTION LEVEL 1): Object reference not set to an instance of an object.
Stack Trace (INNER EXCEPTION LEVEL 1):
at Voicebox.EventTriggers.Processing.Preparation.EventContactsFilter.Filter(ContactsModel contacts, ContactsFilterModel contactsFilterModel, Int32 clientId) in D:\Websites\VoiceboxTest\Voicebox\VoiceBox.EventTriggers\Processing\Preparation\EventContactsFilter.cs:line 24
at Voicebox.EventTriggers.Processing.Preparation.TriggerActionDetailsBuilder.CreateTriggerActionDetails(Trigger trigger, ITriggerEvent triggerEvent) in D:\Websites\VoiceboxTest\Voicebox\VoiceBox.EventTriggers\Processing\Preparation\TriggerActionDetailsBuilder.cs:line 48
at Voicebox.EventTriggers.Processing.Handlers.UserEventsHandler.<>c__DisplayClass6_0.<MapEventsToTriggers>b__0(Trigger t, ITriggerEvent e) in D:\Websites\VoiceboxTest\Voicebox\VoiceBox.EventTriggers\Processing\Handlers\UserEventsHandler.cs:line 62
at Voicebox.EventTriggers.Helpers.PermutationsHelper.<>c__DisplayClass0_1`3.<Permutations>b__1(TB b) in D:\Websites\VoiceboxTest\Voicebox\VoiceBox.EventTriggers\Helpers\PermutationsHelper.cs:line 11
at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
at System.Linq.Enumerable.<SelectManyIterator>d__17`2.MoveNext()
at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
at System.Linq.Enumerable.<SelectManyIterator>d__17`2.MoveNext()
at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
at Voicebox.EventTriggers.Processing.Handlers.UserEventsHandler.<HandleAsync>d__5.MoveNext() in D:\Websites\VoiceboxTest\Voicebox\VoiceBox.EventTriggers\Processing\Handlers\UserEventsHandler.cs:line 37
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Voicebox.EventTriggers.Processing.EventQueueBulkProcessingHandler.<ProcessEventsGrouppedByClient>d__8.MoveNext() in D:\Websites\VoiceboxTest\Voicebox\VoiceBox.EventTriggers\Processing\EventQueueBulkProcessingHandler.cs:line 107
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Voicebox.EventTriggers.Processing.EventQueueBulkProcessingHandler.<ProcessInternal>d__6.MoveNext() in D:\Websites\VoiceboxTest\Voicebox\VoiceBox.EventTriggers\Processing\EventQueueBulkProcessingHandler.cs:line 52
=================================================================================
所以离开上面的堆栈跟踪,它说问题出在文件 EventContactsFilter 的第 24 行。这对我来说毫无意义,因为这是列表的初始化。见下面的代码;
// this is the line 24 which the stack trace points too
List<string> filterExpressions = new List<string>();
foreach (var model in contactsFilterModel.Criteria)
{
string fieldName = GetFieldName(contacts.ListId, model.FieldID, clientId);
FieldType fieldType = GetFieldType(model);
FilterExpression FilterExpression = ExpressionBuilder.GetFilterExpression(fieldName, model, fieldType);
var expression = FilterExpression.sqlExpression;
filterExpressions.Add(expression);
}
如您所见,错误是在创建新列表时抛出的,经过许多小时或在网上搜索后,我无法找出可能导致此问题的原因。如果有人能够提供帮助,我将永远欠你的债!!
我不太确定问题出在 List<string>
声明上。请在该声明周围使用 try-catch
,并查看实际的错误消息是什么。
我的直觉告诉我问题不存在。也许在那条线之上或之下。我的猜测是foreach
。无论哪种方式,try-catch
该代码 :)