我已经阅读了将 ASP.NET MVC HandleError 错误传递给 ELMAH 的帖子和代码,并将代码转换为 VB:
Imports System
Imports System.Web
Imports System.Web.Mvc
Imports Elmah
Public Class HandleErrorAttribute
Inherits System.Web.Mvc.HandleErrorAttribute
Public Overrides Sub OnException(ByVal context As ExceptionContext)
MyBase.OnException(context)
Dim e As Exception = context.Exception
If Not context.ExceptionHandled OrElse RaiseErrorSignal(e) OrElse IsFiltered(context) Then
' if unhandled, will be logged anyhow
'prefer signaling, if possible
'filtered?
Else
LogException(e)
End If
End Sub
Private Function RaiseErrorSignal(ByVal e As Exception) As Boolean
Dim context = HttpContext.Current
If context Is Nothing Then Return False
Dim signal = ErrorSignal.FromContext(context)
If signal Is Nothing Then Return False
signal.Raise(e, context)
Return True
End Function
Private Function IsFiltered(ByVal context As ExceptionContext) As Boolean
Dim config As ErrorFilterConfiguration = context.HttpContext.GetSection("elmah/errorFilter")
If config Is Nothing Then Return False
Dim testContext = New ErrorFilterModule.AssertionHelperContext(context.Exception, HttpContext.Current)
Return config.Assertion.Test(testContext)
End Function
Private Sub LogException(ByVal e As Exception)
Dim context = HttpContext.Current
ErrorLog.GetDefault(context).Log(New Elmah.Error(e, context))
End Sub
End Class
但是,我注意到当我尝试编译代码时,我从 VS2008 收到以下错误:
错误 3 无法发出程序集:引用的程序集“Elmah”没有强名称 Main
现在,HandleErrorAttribute.vb 位于 [包含 SLN 文件的文件夹]\Main\HandleErrorAttribute.vb 中,视图、控制器等都在 Main 文件夹下。
如果您能够让原始 C# 代码工作,您是如何解决编译时错误的?(而且,如果你让它在 VB 中工作,那就更好了)
编辑
我已经尝试使用 sn.exe 对其进行签名:
C:\Program Files\Microsoft Visual Studio 9.0\VC>sn -R "C:\Documents and Settings \zchoy\My Documents\Burrow\Code\Main\lib\Elmah.dll" "C:\documents and settings\z choy\我的文档\burrow\code\代码签名key.pfx" Microsoft (R) .NET Framework 强名称实用程序版本 3.5.30729.1 版权所有 (c) 微软公司。版权所有。 C:\Documents and Settings\zchoy\My Documents\Burrow\Code\Main\lib\Elmah.dll 确实 不代表强命名程序集
显然没有帮助。