【问题标题】:Type resolution error during ASP.NET precompilationASP.NET 预编译期间的类型解析错误
【发布时间】:2011-02-16 18:23:58
【问题描述】:

在我们的 .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 预编译期间抛出自定义异常会导致辅助 SerializationException?为什么它试图序列化异常?同样,为什么使用 BCL InvalidOperationException not 会导致二级 SerializationException?

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

【问题讨论】:

    标签: c# asp.net remoting .net-remoting


    【解决方案1】:

    似乎 aspnet_compiler.exe 程序使用 .NET Remoting 与 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。我也遇到了奇怪的错误,并使用您复制到框架目录的方法来确定实际的堆栈跟踪。谢谢!
    • @TheCloudlessSky 很高兴为您提供帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    • 2011-03-23
    • 1970-01-01
    相关资源
    最近更新 更多