简体   繁体   中英

Cannot reference custom event from web.config

I've written a custom event MyWebErrorEvent derived from WebErrorEvent located in the App_Code folder of my ASP.NET 2.0 Web Site Project. The class MyWebErrorEvent is not contained within a namespace. I've put the following into my web.config file:

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

At compile time and run time I get the following error:

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>

The class MyWebErrorEvent does indeed compile without errors. Anyone know how to fix this?

EDIT: http://msdn.microsoft.com/en-us/library/bb398933.aspx says that this should work for custom events. A quote:

Add the assembly that contains the custom Web event implementation to the Bin subdirectory of the ASP.NET application. Alternatively, you can add the event source code file to the App_Code subdirectory.

However it also says this will not work for custom event providers:

Put the assembly that contains the custom provider implementation in the application's Bin subdirectory. You cannot put the provider source code file in the App_Code subdirectory, because the health monitoring system is configured and created before any code files in the App_Code subdirectory are compiled.

I'm guessing the documentation is actually incorrect about custom events and they must go into a assymbly distinct from the web site.

(Just guessing here...)

For Web Sites, classes in App_Code do not get compiled until runtime. Your Web.config is being compiled before MyWebErrorEvent has had a chance to be dynamically compiled. Your best bet is to create a class library separately from the web site and reference the project from your web site. Another option is to convert to using a Web Application, which actually compiles all types into one DLL at compile time rather than emitting them dynamically at run-time.

No need to put it in a separate DLL. Instead use

type="MyWebErrorEvent,App_Code" to reference the MyWebErrorEvent class.

Does your type MyWebErrorEvent use a namespace?

The error message looks like a typical missing namespace issue.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM