Pregunta

He leído a través de los mensajes y el código para el paso de los errores ASP.NET MVC handleError a ELMAH y convertido el código de 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

Sin embargo, he notado que cuando intento compilar el código, me sale el siguiente error de VS2008:

Error  3   Unable to emit assembly: Referenced assembly 'Elmah' does not have a strong name    Main

En este momento, HandleErrorAttribute.vb vive en [carpeta con el archivo SLN] \ Main \ HandleErrorAttribute.vb y las vistas, controladores, etc. son todos bajo la carpeta principal.

Si fueron capaces de obtener el C # código original para trabajar, ¿cómo se consigue evitar el error de tiempo de compilación? (Y, si lo ha hecho para trabajar en VB, que es incluso mejor)

Editar

Ya he intentado firmar con 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\my documents\burrow\code\code signing key.pfx"

Microsoft (R) .NET Framework Strong Name Utility  Version 3.5.30729.1
Copyright (c) Microsoft Corporation.  All rights reserved.

C:\Documents and Settings\zchoy\My Documents\Burrow\Code\Main\lib\Elmah.dll does
 not represent a strongly named assembly

Es evidente que inútil.

¿Fue útil?

Solución

Cuando tuve este problema, descargado el código fuente abierto y ELMAH arriba en Visual Studio. Luego utiliza la pestaña de firma en las propiedades del proyecto para firmar el ensamblado, a continuación, compilado mi propia versión de Elmah.dll.

A continuación, he vinculado esta versión firmada en mi proyecto principal.

Otros consejos

Parece que necesitas para firmar el ensamblado Elmah de modo que tenga un nombre seguro.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top