我的代码中出现以下错误。
编译器错误消息: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();
}
}
答案 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();
}
}