Исключение, брошенное в упомянутый проект? - PullRequest
2 голосов
/ 01 января 2011

У меня есть решение Visual Studio 2010, состоящее из 2 проектов:

  1. Core , проект библиотеки классов C #, который обрабатывает функциональность и доступ к данным
  2. UI , веб-сайт ASP.NET 4 (.NET Framework 4), который ссылается на ядро ​​и вызывает функциональность в ядре.

Мой обработчик исключений установлен в Global.asax (Application_Error.) Когда в пользовательском интерфейсе возникает исключение, все работает отлично, я получаю имя файла, номер строки и т. Д.

Это не относится к исключениям, которые происходят в Ядре. Для этого я получаю стека трассировки, как:

{FillUserCount at offset 2376 in file:line:column <filename unknown>:0:0}

P.S. Core.dll и Core.pdb присутствуют в папке пользовательского интерфейса. В Visual Studio -> Сервис -> Параметры -> Отладка -> «Включить только мой код» не отмечено, а «Включить поддержку исходного сервера» отмечено.

Есть ли способ получить информацию о стеке (имя файла, класс, метод, номер строки) также для ошибок, которые произошли в моем проекте, на который есть ссылка?

Ответы [ 2 ]

3 голосов
/ 02 января 2011

Решением этой проблемы было создание нового веб-сайта и повторная ссылка на проект Core.

Тем не менее, упомянутые Джоном Скитом предпосылки остаются прежними:

  • проекты должны быть построены в конфигурации Debug, а не Release
  • при обращении к проекту, убедитесь, что файлы PDB скопированы
  • на стороне кода, при получении информации о возникшем исключении,и используя StackTrace, убедитесь, что вы создали экземпляр со вторым параметром, установленным в true (true, чтобы захватить имя файла, номер строки и номер столбца; в противном случае - false.)

Это мой последнийрабочий код.Это может помочь другим:

        Exception ex = Server.GetLastError().GetBaseException();       

        StackTrace trace = new StackTrace(ex, true);
        if (trace.FrameCount == 0)
            return;

        StackFrame stackFrame = trace.GetFrame(0);

        string className, fileName, functionName, message;
        int line = 0;

        // if for some reason, filename is being retrieved as null
        if (stackFrame.GetFileName() == null)
        {
            className = ex.TargetSite.ReflectedType.Name;
            fileName = ex.TargetSite.ReflectedType.Name;
            functionName = ex.TargetSite.Name;
            message = ex.Message;
        }
        else
        {
            // Collect data where exception occured
            string[] splitFile = stackFrame.GetFileName().Split('\\');
            className = splitFile[splitFile.Length - 1];
            fileName = stackFrame.GetFileName();
            functionName = stackFrame.GetMethod().Name;
            message = ex.Message;
            line = stackFrame.GetFileLineNumber();
        }
2 голосов
/ 01 января 2011

Как вы ссылаетесь на Core?Если вы добавили ссылку на «Release» DLL, это объяснило бы это ... если вы только что добавили ссылку на проект и выполняете сборку с «Debug»конфигурация тогда должна быть в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...