Использование ELMAH с ASP.NET MVC в VB:Компиляция:У Эльмы нет сильного имени

StackOverflow https://stackoverflow.com/questions/1338228

  •  20-09-2019
  •  | 
  •  

Вопрос

Я прочитал сообщения и код для передачи ошибок 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 получаю следующую ошибку:

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

В настоящее время HandleErrorAttribute.vb находится в [папке с файлом SLN]\Main\HandleErrorAttribute.vb, а представления, контроллеры и т. д. находятся в основной папке.

Если вам удалось заставить работать исходный код 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\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

Явно бесполезно.

Это было полезно?

Решение

Когда у меня возникла эта проблема, я скачал исходный код ELMAH и открыл его в Visual Studio.Затем я использовал вкладку «Подписание» в свойствах проекта, чтобы подписать сборку, а затем скомпилировал свою собственную версию Elmah.dll.

Затем я связал эту подписанную версию с моим основным проектом.

Другие советы

Похоже, вам нужно подписать сборку Elmah, чтобы у нее было строгое имя.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top