由于其保护级别,'System.Exception.HResult'无法访问

时间:2013-10-15 10:28:47

标签: c# asp.net

我的代码中出现以下错误。

  

编译器错误消息:CS0122:由于其保护级别,“System.Exception.HResult”无法访问

我的App_Code文件夹中有一个类,并使用该类的LogException()方法将异常详细信息插入数据库。

已经为此类提供了业务访问层引用以访问功能。

我在我的本地计算机和本地IIS中尝试过,它运行正常。但是当我在Windows服务器IIS上托管它时它会给我错误。

请帮我解决这个问题。

更新

以下是App_Code/Exception.cs类中的函数,我在此类中引用了业务访问层。

public static void LogException(Exception ex, string userId, string refPage, string appName)
{
    try
    {
        ExceptionManager objEx = new ExceptionManager(); // this is business class
        objEx.InsertErrorLog(userId, appName, ex.HResult, ex.GetHashCode(), ex.GetType().ToString(), ex.Message, ex.Source, ex.StackTrace, refPage);
    }
    catch {
        DestroySession();
    }
}

2 个答案:

答案 0 :(得分:4)

听起来您正试图设置HResult的{​​{1}}属性。你不能这样做,因为它的setter是protected。如果您需要设置此属性,那么您唯一的选择是派生新类型Exception,例如

Exception

在我看来,您的实际问题是您的开发/部署环境之间的.NET版本的差异。 public class CustomException : Exception { public CustomException(string message, int hresult) : base(message) { HResult = hresult } } 属性完全 HResult直到4.5。我认为,您在部署之后看到这个原因的原因是因为您运行的是旧版本的.NET。

您需要在部署计算机上安装.NET 4.5。

答案 1 :(得分:3)

更新到.NET 4.5。

或致电System.Runtime.InteropServices.Marshal.GetHRForException

原始帖子中的代码,带有此更改:

public static void LogException(Exception ex, string userId, string refPage, string appName)
{
    try
    {
        ExceptionManager objEx = new ExceptionManager(); // this is business class
        objEx.InsertErrorLog(userId, appName,
                System.Runtime.InteropServices.Marshal.GetHRForException(ex),
                ex.GetHashCode(), ex.GetType().ToString(), ex.Message, ex.Source, ex.StackTrace, refPage);
    }
    catch {
        DestroySession();
    }
}