2013-10-15 5 views
2

Я получаю следующую ошибку в своем коде.'System.Exception.HResult' недоступен из-за его уровня защиты

Компилятор Сообщение об ошибке: 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

Даже в вашей локальной машине нет никакого способа, вы можете назвать защищенную сеттер вне самого объекта. Кроме того, почему вы пытаетесь установить HResult в первую очередь? Если это исходит из другого исключения, сохраните это исключение –

+0

Гораздо проще понять, что происходит, и указать вам в правильном направлении, показывая фактический код, вызывающий ошибку. – TeaDrivenDev

+0

Я пытаюсь получить код ошибки, а не устанавливать его. – Chirag

ответ

6

Похоже, вы пытаетесь установить HResult свойство Exception. Вы не можете сделать это, так как он настроен protected. Если вам нужно установить это свойство, то единственной альтернативой является получение нового типа Exception, например.

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

Кажется мне ваш фактический вопрос разница в версии .NET между вашей среде DEV/развертывания. Объект HResult был полностьюprotected до 4.5. Я полагаю, причина, по которой вы видите, что это когда-то была развернута, заключается в том, что вы работаете под более старой версией .NET.

Вам необходимо установить .NET 4.5 на свой компьютер развертывания.

+0

Если вы * нужно *, чтобы установить это, сделайте это в классе потомков. – Lloyd

+0

@PanagiotisKanavos ах, не беспокойтесь, я удалил мины, а также. – James

+0

Я просто передаю параметр Exception как этот метод и используя ex.HResult для получения кода ошибки для входа в БД. – Chirag

1

Обновление до .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(); 
    } 
} 
+0

Это должно быть отмечено как правильный ответ. – rkagerer

Смежные вопросы