Дважды щелкните, чтобы перейти к исходному в окне вывода

Когда вы создаете проект в Visual Studio, окно вывода выводит статус процесса сборки, включающий ошибки и предупреждения. Двойной щелчок по этим строкам откроет файл, содержащий эту ошибку/предупреждение в редакторе.

Теперь, можно ли получить эту функциональность с выходом из Debug.WriteLine или что-нибудь в этом роде? Таким образом, когда окно Debug выводится, например,

Buffering: 13:03:20 to 13:03:21

Я мог бы дважды щелкнуть по нему и перейти к строке BufferClass.cs, строка 45, так как это было место вызова Debug.WriteLine.

Возможно ли это либо через библиотеки .net, либо через расширение Visual Studio?

Ответ 1

Я просто продолжу и отвечу на это сам тогда.

Чтобы иметь возможность напрямую перейти к исходному файлу, отформатируйте свое сообщение следующим образом:

string.Format("{0}({1})", filePath, lineNumber);

Таким образом, Visual Studio автоматически добавит функцию двойного щелчка и приведет вас непосредственно к источнику.

Кроме того, если вы используете новую функциональность в Visual Studio 2012, как описано здесь: Сведения о вызывающем абоненте, вы можете реализовать свой метод ведения журнала, подобный этому

private void LogData(string message, 
                     [CallerMemberName] string callerName = "",
                     [CallerLineNumber] int lineNumber = -1,
                     [CallerFilePath] string filePath = "")
    {
        Debug.WriteLine(message);
        Debug.WriteLine(string.Format("    {0}({1})", filePath, lineNumber));
    }

Кроме того, добавление ": error" или ": warning" в конец делает цвет Visual Studio красным или желтым. Если есть какие-либо статьи, описывающие это дальше, мне бы очень хотелось знать.

Ответ 2

Ну, этот вопрос (и ответ) выглядит немного устаревшим, поэтому позвольте мне освежить:

В Visual Studio 2013 следующий формат является единственным, который, как представляется, вызывает привязку к файлу/строке, которая повторяет сообщение:

С#:

{0}({1}): <message here>

Для C/С++ дайте этому вихрь:

#define STRINGX(x) #x
#define STRING(x) STRINGX(x)
#define MY_LOG(msg) __pragma(message(__FILE__"(" STRING(__LINE__) "): " msg))

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