Невозможно сослаться на пользовательское событие из web.config - PullRequest
4 голосов
/ 27 января 2009

Я написал пользовательское событие MyWebErrorEvent, полученное из WebErrorEvent, расположенное в папке App_Code моего проекта веб-сайта ASP.NET 2.0. Класс MyWebErrorEvent не содержится в пространстве имен. Я поместил в свой файл web.config следующее:

<configuration>
  <system.web>
    <healthMonitoring>
      <eventMappings>
        <add name="Event1" startEventCode="0" endEventCode="2147483647" type="MyWebErrorEvent"/>
      </eventMappings>
    </healthMonitoring>
  </system.web>
</configuration>

Во время компиляции и выполнения я получаю следующую ошибку:

Description: An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately.

Parser Error Message: Could not load type 'MyWebErrorEvent'.

Source Error: 

Line 16: <healthMonitoring>
Line 17: <eventMappings>
Line 18: <add name="Event1" startEventCode="0" endEventCode="2147483647" type="MyWebErrorEvent"/>
Line 19: </eventMappings>
Line 20: </healthMonitoring>

Класс MyWebErrorEvent действительно компилируется без ошибок. Кто-нибудь знает, как это исправить?

РЕДАКТИРОВАТЬ: http://msdn.microsoft.com/en-us/library/bb398933.aspx говорит, что это должно работать для пользовательских событий. Цитата:

Добавьте сборку, содержащую пользовательскую реализацию веб-события, в подкаталог Bin приложения ASP.NET. Кроме того, вы можете добавить файл исходного кода события в подкаталог App_Code.

Однако также говорится, что это не будет работать для пользовательских провайдеров событий:

Поместите сборку, содержащую реализацию пользовательского провайдера, в подкаталог Bin приложения. Вы не можете поместить файл исходного кода провайдера в подкаталог App_Code, поскольку система мониторинга работоспособности настраивается и создается до компиляции любых файлов кода в подкаталоге App_Code.

Я предполагаю, что документация о пользовательских событиях действительно неверна, и они должны входить в сборку, отличную от веб-сайта.

Ответы [ 3 ]

3 голосов
/ 28 января 2009

(Просто угадай здесь ...)

Для веб-сайтов классы в App_Code не компилируются до времени выполнения. Ваш Web.config компилируется до того, как MyWebErrorEvent сможет динамически скомпилироваться. Лучше всего создать библиотеку классов отдельно от веб-сайта и ссылаться на проект с веб-сайта. Другой вариант - перейти на использование веб-приложения, которое фактически компилирует все типы в одну DLL во время компиляции, а не генерирует их динамически во время выполнения.

1 голос
/ 12 мая 2011

Нет необходимости помещать его в отдельную DLL. Вместо этого используйте

type="MyWebErrorEvent,App_Code" для ссылки на класс MyWebErrorEvent.

0 голосов
/ 28 января 2009

Использует ли ваш тип MyWebErrorEvent пространство имен?

Сообщение об ошибке выглядит как типичная проблема с отсутствующим пространством имен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...