Добавить элемент в список ошибок в макросе - PullRequest
0 голосов
/ 08 марта 2011

Я хочу уведомить пользователя макроса, если что-то пошло не так во время выполнения макроса.Мне было интересно, можно ли добавить элемент в список ошибок Visual Studio?

Это можно сделать изнутри AddIn (например, здесь ), но мне хотелось бысделать то же самое из макроса.

Редактировать


Чтобы уточнить, чего я хочу достичь, вот пример из библиотеки макросов Samples (Alt + F8 -> Примеры -> Утилиты -> SaveView ())

Sub SaveView()
    Dim name As String

    name = InputBox("Enter the name you want to save as:", "Save window layout")
    If (name = "") Then
        MsgBox("Empty string, enter a valid name.")
    Else
        DTE.WindowConfigurations.Add(name)
    End If
End Sub

Вместо предупреждения MsgBox ("...") я хочу поместить ошибку в список ошибок VS.

Ответы [ 3 ]

2 голосов
/ 17 марта 2011

Я думаю, что для вашей ситуации вывод чего-либо на вашу собственную панель вывода был бы более подходящим.Список ошибок обычно используется для ошибок в проекте, над которым работает пользователь, а не для ошибок, вызванных выполнением макросов.Особенно, когда кто-то говорит, что это невозможно сделать.:)

Вывод на вашу собственную панель вывода довольно прост:

DTE.Windows.Item(Constants.vsWindowKindOutput).Activate()
Dim panes As OutputWindowPanes = window.OutputWindowPanes
Dim my_pane As OutputWindowPane
Try
    my_pane = panes.Item("SaveView")
Catch exception As System.ArgumentException
    my_pane = panes.Add("SaveView")
End Try
my_pane.Activate()
my_pane.OutputString("Empty string, enter a valid name." + vbCrLf)

Надеюсь, это поможет.

Ура,

Себастьян

2 голосов
/ 16 марта 2011

Вы можете добавить элемент в список задач легко из вашего макроса.Просто используйте метод AddTaskToList из этой статьи и измените m_objDTE на DTE.Я попробовал, и это сработало.

Однако добавить элемент в список ошибок, вероятно, невозможно.Вам необходимо вызвать службы VS, см. , как происходит добавление ошибки в надстройке .Я создал макрос из этого кода, и он не работал.Как правило, службы VS не работают в макросах.Мне удалось успешно создать ErrorListProvider.Я мог бы получить доступ к его методам и свойствам.Но вызов ErrorListProvider.Task.Add вызвал исключение COM.Если вы хотите поиграть с ним, несколько примечаний: Как описано в статье, вам необходимо получить 4 сборки из GAC , например, в каталог c: \ dlls \.Поскольку Macros IDE не позволяет просматривать при добавлении ссылки, вам необходимо скопировать эти библиотеки в каталог ... \ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ PublicAssemblies (измените версию 10.0 на версию VS).Затем, когда вы добавляете ссылку в Macros IDE, вы должны увидеть сборки.

Функция GetService всегда возвращала Nothing.Добавьте в класс следующее поле:

Private serviceProvider As IServiceProvider = New Microsoft.VisualStudio.Shell.ServiceProvider(CType(DTE, Microsoft.VisualStudio.OLE.Interop.IServiceProvider))

и в строке изменения функции GetService:

objService = Microsoft.VisualStudio.Shell.Package.GetGlobalService(serviceType)

на

objService = serviceProvider.GetService(serviceType)

Как я уже писал, все выглядит нормальнотогда, но ErrorListProvider.Task.Add завершается ошибкой.

0 голосов
/ 03 октября 2014

Разве это не то, что вам нужно?

HOWTO: добавить ошибку с навигацией в список ошибок из надстройки Visual Studio

http://www.mztools.com/articles/2008/MZ2008022.aspx

...