Во время предварительной компиляции ASP.NET нашего веб-приложения .NET 3.5 в инициализаторах типов выполняется различная инициализация.Один из инициализаторов типа генерирует пользовательское исключение, когда среда неправильно настроена.Однако, когда выдается наше пользовательское исключение, вот что aspnet_compiler.exe сообщает нам:
[exec] error ASPRUNTIME: Type is not resolved for member 'App.Project.CustomException,App.Project, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
[exec]
[exec] [SerializationException]: Type is not resolved for member 'App.Project.CustomException,App.Project, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
[exec] at System.Web.Compilation.BuildManagerHost.PrecompileApp(ClientBuildManagerCallback callback)
[exec] at System.Web.Compilation.ClientBuildManager.PrecompileApplication(ClientBuildManagerCallback callback, Boolean forceCleanBuild)
[exec] at System.Web.Compilation.ClientBuildManager.PrecompileApplication(ClientBuildManagerCallback callback)
[exec] at System.Web.Compilation.Precompiler.Main(String[] args)
Обратите внимание, что никакая «реальная» информация трассировки стека не включена.Однако, когда я изменяю наш код на исключение InvalidOperationException (вместо нашего пользовательского исключения), трассировка стека включается правильно.(Кроме того, наш тип CustomException помечен [Serializable]. Когда мы удаляем аннотацию [Serializable], aspnet_compiler.exe жалуется по-другому - что наше пользовательское исключение не помечено как таковое.)
Кто-нибудь знает, почему создание пользовательского исключения во время предварительной компиляции ASP.NET вызывает вторичное исключение SerializationException?Почему он пытается сериализовать исключение?Точно так же, почему использование BCL InvalidOperationException not вызывает вторичное SerializationException?
Может ли это быть из-за того, что aspnet_compiler.exe пытается каким-то образом отразить неожиданные исключения?(И поэтому, поскольку у нас не загружена наша сборка App.Project, он не может определить тип?)