5

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

编译器错误消息: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();
    }
}
4

2 回答 2

6

更新到 .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();
    }
}
于 2017-10-27T22:10:46.927 回答
4

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

public class CustomException : Exception
{
    public CustomException(string message, int hresult)
        : base(message)
    {
        HResult = hresult
    }
}

在我看来,您的实际问题是您的开发/部署环境之间的 .NET 版本不同。该HResult物业完全 protected达到4.5。我假设您在部署后看到它的原因是因为您在旧版本的 .NET 下运行。

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

于 2013-10-15T10:30:30.233 回答