好吧,我对从生产环境收到的错误完全感到困惑。
mscorlib:已添加具有相同密钥的项目。
使用堆栈跟踪
在 System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
在 Domain.MyClass.CompleteReasons(字典`2 个原因)
在 Domain.MyClass.ctor(...)
at ...(调用方法树)
在 MySite.MyPage.Page_Load(对象发送者,EventArgs e)
在 System.Web.UI.Control.LoadRecursive()
在 System.Web.UI.Page.ProcessRequestMain(布尔 includeStagesBeforeAsyncPoint,布尔 includeStagesAfterAsyncPoint)
没有什么不寻常的,但如果你看看那个CompleteReasons
方法:
Private Function CompleteReasons(ByVal reasons As Dictionary(Of MyReasonsEnum, String)) As Dictionary(Of MyReasonsEnum, String)
If reasons Is Nothing Then
reasons = New Dictionary(Of MyReasonsEnum, String)()
End If
For Each reason As MyReasonsEnum In System.Enum.GetValues(GetType(MyReasonsEnum))
If Not reasons.ContainsKey(reason) Then
reasons.Add(reason, ReasonToString(reason))
End If
Next
Return reasons
End Function
您会看到添加字典项的唯一位置是在密钥检查中。
只在生产中看到过这种情况,并且在生产系统和我自己的调试环境中都无法触发问题。
我们的生产服务器是 Windows Server 2012 R2,运行 IIS 8.5
任何人对我如何能够防止这种情况发生或在哪里可以找到有关原因的更多信息有任何想法,因为这就是我所拥有的全部信息。