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

C# ';System.Exception.HResult';由于其保护级别,无法访问,c#,asp.net,C#,Asp.net,我的代码中出现以下错误 编译器错误消息:CS0122:“System.Exception.HResult”由于其保护级别而无法访问 我的App\u code文件夹中有一个类,使用该类的LogException()方法将异常详细信息插入数据库 业务访问层引用已提供给此类以访问功能 我在我的本地机器和本地IIS中试用了它,它运行良好。但当我在windows服务器IIS上托管它时,它会给我错误信息 请帮我解决这个问题 更新: 下面是我在App_code/Exception.cs类中的函数,我在这个类中

我的代码中出现以下错误

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

我的
App\u 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();
    }
}

听起来您正试图设置
异常
HResult
属性。你不能像塞特那样做。如果需要设置此属性,则唯一的选择是派生一种新类型的
异常
,例如

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

在我看来,您的实际问题在于开发/部署环境之间的.NET版本不同。在4.5之前,
HResult
属性一直受到
保护。我想,您看到这个部署后的原因是,您运行的是较旧版本的.NET

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

更新到.NET 4.5

或者打电话

原始帖子中的代码,更改如下:

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();
    }
}

如果需要设置,请在子类中进行设置。@PanagiotisKanavos啊,不用担心,我也删除了地雷。我只是将异常作为参数传递给该方法,并使用ex.HResult获取登录数据库的错误代码。@Chirag如果您只获取了HResult,则不会得到警告。只有当你试图设置时才可以。@james-非常感谢。我刚刚在服务器上安装了Framework4.5,现在运行良好。即使在本地机器上,也无法在对象本身之外调用受保护的setter。此外,为什么您要首先设置HResult?如果它来自另一个异常,请保存此异常。这样更容易理解发生了什么,并为您指出正确的方向。显示导致错误的实际代码。我正在尝试获取错误代码,而不是设置错误代码。@TeaDrivenDev-我添加了代码供您参考。