c# - c# 对象引用未设置为对象的实例(堆栈跟踪中未提及空引用)
问题描述
在发布模式下运行我的 Windows 服务时,我收到“对象引用未设置为对象的实例”错误(请注意,正如您从我的堆栈跟踪中看到的那样,它没有提到与 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
=================================================================================
所以离开上面的堆栈跟踪,它说问题出在第 24 行的文件 EventContactsFilter 中。这对我来说毫无意义,因为这是一个列表的初始化。见下面的代码;
// 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
在该声明周围使用 a ,并查看实际的错误消息是什么。
我的直觉说问题不存在。也许上面的东西,或者在那条线下。我的猜测是foreach
。无论哪种方式,try-catch
该代码:)
推荐阅读
- ansible - 使用 Ansible 命令模块时文件名太长
- javascript - 在文本框内取消退格键和所有按键
- php - 如何找到两个数组之间的差异
- javascript - 班级列表显示错误。我正在使用 swatch 选择变体我想将 jQuery 转换为纯 javascript 来选择?
- ionic-framework - Ionic V1:无法构建离子 APK 找不到模块“./array/insert”
- push-notification - 进行 Cordova 构建 Android 时的最新 cordova-plugin-mfp-push 错误
- android - 用 Sceneform sdk 中可渲染的另一个节点替换节点可渲染(相同的旋转、位置和缩放)
- java - 在服务器上部署多模块项目后,maven 是否需要互联网连接
- batch-file - 如何使用批处理文件运行 Teraterm 和 TTL 文件?
- javascript - 移动设备与 css 的触摸事件