Как отловить и сохранить ошибки времени компиляции и выполнения моего проекта решения в Visual Studio 2008/2010 - PullRequest
2 голосов
/ 13 апреля 2011

В настоящее время я пытаюсь найти способ, каким образом я могу сохранить ошибки времени компиляции и выполнения (в таблицах базы данных), которые проект / решение / веб-сайт в моем обозревателе решений Visual Studio может выдать.

Заранее спасибо за помощь.

Обновление: Пока я хотел бы регистрировать ошибки только для языка C #.

Я отчаянно ищу способ или решение для реализации этого ... любая помощь будет высоко оценена ...

НиК.

Ответы [ 5 ]

5 голосов
/ 13 апреля 2011

Ошибки времени компиляции сохраняются в html buildlog, проверьте в окне вывода ссылку. Не должно быть слишком сложно поместить в базу данных. Программным обеспечением, использующим эту информацию, является CruiseControl.Net, так что вы, вероятно, сможете узнать, посмотрев на их код.

За ошибки во время выполнения невозможно ответить. Прежде всего, непонятно, о чем вы спрашиваете. Под «ошибками во время выполнения» вы подразумеваете исключение, например деление на ноль? Во-вторых, это также очень отличается между различными языками, поддерживаемыми в VS, например .NET языки и прямой C ++.

Обновление: поскольку вы работаете на платформе .NET, я предлагаю вам обернуть вашу основную функцию блоком try / catch, который перехватывает все выданные ошибки, и просто записать всю информацию, которую вы можете получить из этой ошибки, в свою базу данных. (например, трассировка стека, вид исключения, возможно, мини-дамп). Это, конечно, не будет работать с ошибками, которые пойманы или проглочены. В случае, если вы также захотите записать их (по какой-либо причине), вам нужно будет сделать несколько более умных исходных преобразований, например, с помощью отражения. Примером может быть добавление ведения журнала в конструктор базового класса Exception.

1 голос
/ 08 июня 2011

Мое предложение будет заключаться в разработке расширения для визуальной студии, подобного Resharper Jetbrain.Visual Studio предоставляет богатый API для взаимодействия с самой IDE.Если вы используете сборки командной строки вне Visual Studio, вам может потребоваться передать вывод в файл и проанализировать его.

Вот несколько ссылок, которые помогут вам начать разработку расширения / надстройки:

http://msdn.microsoft.com/en-us/library/dd885119.aspx

http://msdn.microsoft.com/en-us/vstudio/bb968855

А вот ссылка на видео для интеграции со списком ошибок:

http://msdn.microsoft.com/en-us/vstudio/cc563922

Ошибки во время выполнения могут быть проще, поскольку существует событие-исключение appdomain, которое вы можете обработать.Вы можете подключить обработчик к этому событию и зарегистрировать исключение.

http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception.aspx

Для обработанных исключений есть несколько методов.У Microsoft есть блок обработки исключений, который можно использовать, или вы можете создать пользовательский тип исключения, который вы используете во всем приложении.

0 голосов
/ 09 июня 2011

Только компилятор C ++ делает buildlog. C # нет. Вам нужно будет либо пойти по пути расширения / расширения (в этом случае, чтобы начать, воспользуйтесь рекомендациями Дейва Фергюсона), либо вы можете использовать командную строку для компиляции (csc.exe) и направить вывод в файл (csc.exe / options >> log.txt) и анализируем его.

0 голосов
/ 09 июня 2011

Файлы проекта Visual Studio - это файлы MSBuild, которые могут содержать пользовательские этапы компиляции.Возможно, можно заменить шаг компиляции на пользовательский шаг, который вызывает компилятор CSharp и регистрирует ошибку.

Если вы дадите нам немного больше информации о том, для чего вы хотите его использовать, возможно, мы можем предоставить альтернативурешения.Например, нужно ли регистрировать ошибки изнутри Visual Studio или достаточно, чтобы внешний инструмент регистрировал эти ошибки?

0 голосов
/ 09 июня 2011

Звучит так, как будто вы хотите это для веб-сайта. Вы можете создать класс Global (Global.asax.vb), а затем обработать ошибку в событии Application_Error. Здесь вы имеете дело с любыми необработанными исключениями (например, у меня vb):

    Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
    ' Fires when an error occurs
    Dim appException As System.Exception = Server.GetLastError()
    Dim tempException As System.Exception = Nothing

    If appException Is Nothing Then
        Return
    End If

    tempException = appException.InnerException

tempException будет содержать необработанное исключение, и вы можете сохранить его в базе данных или отправить кому-нибудь по электронной почте. Твой выбор.

Вы можете сделать нечто очень похожее в приложениях winform, обработав событие _unhandledException в событиях Application.

...