C# ASP.NET预编译期间的类型解析错误

C# ASP.NET预编译期间的类型解析错误,c#,asp.net,remoting,.net-remoting,C#,Asp.net,Remoting,.net Remoting,在.NET 3.5 web应用程序的ASP.NET预编译期间,在类型初始值设定项中执行各种初始化。当环境配置不正确时,其中一个类型初始值设定项会引发自定义异常。但是,当抛出自定义异常时,aspnet_compiler.exe会告诉我们: [exec] error ASPRUNTIME: Type is not resolved for member 'App.Project.CustomException,App.Project, Version=1.0.0.0, Culture=neutral

在.NET 3.5 web应用程序的ASP.NET预编译期间,在类型初始值设定项中执行各种初始化。当环境配置不正确时,其中一个类型初始值设定项会引发自定义异常。但是,当抛出自定义异常时,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预编译期间引发自定义异常会导致次要序列化异常吗?为什么它试图序列化异常?类似地,为什么使用BCL InvalidOperationException不会导致二级序列化异常


这可能是因为aspnet_compiler.exe试图对意外异常进行某种反射吗?(因此,由于它没有加载我们的App.Project程序集,因此无法解析类型?

看来aspnet_compiler.exe程序使用.NET远程处理与ASP.NET运行时通信。当ASP.NET运行时引发我的自定义异常时,aspnet_compiler.exe无法对其进行反序列化,因为它无法解析自定义异常的类型,因为我的App.Project程序集不在GAC中,也无法通过对aspnet_compiler.exe的路径搜索进行访问


为了验证这一假设,我将App.Project程序集复制到与aspnet_compiler.exe(C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727)相同的目录中,并执行了预编译。当抛出自定义异常时,它会出现我所期望的正常堆栈跟踪,而SerializationException不会发生。

+1用于提示。我也遇到了奇怪的错误,并使用您复制到框架目录的方法来确定实际的堆栈跟踪。谢谢@我很高兴能帮助你!