4

我编写了一个从位于我的 ASP.NET 2.0 网站项目的 App_Code 文件夹中MyWebErrorEvent派生的自定义事件。WebErrorEvent该类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说这应该适用于自定义事件。一个报价:

将包含自定义 Web 事件实现的程序集添加到 ASP.NET 应用程序的 Bin 子目录。或者,您可以将事件源代码文件添加到 App_Code 子目录。

但是它也表示这不适用于自定义事件提供程序:

将包含自定义提供程序实现的程序集放在应用程序的 Bin 子目录中。您不能将提供程序源代码文件放在 App_Code 子目录中,因为在编译 App_Code 子目录中的任何代码文件之前,已配置和创建了健康监测系统。

我猜文档实际上关于自定义事件是不正确的,它们必须进入一个与网站不同的组件。

4

3 回答 3

3

(这里只是猜测......)

对于网站,App_Code 中的类直到运行时才被编译。您的 Web.config 在 MyWebErrorEvent 有机会被动态编译之前被编译。最好的办法是独立于网站创建一个类库,并从您的网站引用该项目。另一种选择是转换为使用 Web 应用程序,它实际上在编译时将所有类型编译到一个 DLL 中,而不是在运行时动态发出它们。

于 2009-01-28T06:04:24.237 回答
1

无需将其放在单独的 DLL 中。而是使用

type="MyWebErrorEvent,App_Code"引用 MyWebErrorEvent 类。

于 2011-05-12T09:03:56.057 回答
0

您的 MyWebErrorEvent 类型是否使用命名空间?

错误消息看起来像是典型的缺少命名空间问题。

于 2009-01-28T05:50:45.170 回答