Сбой DTE.Debugger.Go (False) после внешней сборки в макросе Visual Studio 2008 - PullRequest
1 голос
/ 04 марта 2010

Я пишу макрос для сохранения всех открытых документов, запускаю MSBuild для параллельной сборки проектов C #, а затем запускаю решение с помощью отладчика.Надежная автоматизация этих шагов сэкономит моей команде много времени.

Моя проблема в том, что я не могу заставить DTE.Debugger.Go (False) работать, когда внешняя сборка изменяет выходные файлы.


Ошибка


Невозможно привести объект COM типа 'System .__ ComObject' к типу интерфейса 'EnvDTE80.DTE2'.Эта операция завершилась неудачно, так как произошел сбой вызова QueryInterface в COM-компоненте для интерфейса с IID '{2EE1E9FA-0AFE-4348-A89F-ED9CB45C99CF}' из-за следующей ошибки: Сбой системного вызова.(Исключение из HRESULT: 0x80010100 (RPC_E_SYS_CALL_FAILED)).


OK


Вот определение макроса, которое у меня есть:

Private Function SaveAllDocuments() As Boolean
    Dim doc As Document
    For Each doc In DTE.Documents
        If Not doc.Saved Then
            If (doc.Save(doc.FullName) <> vsSaveStatus.vsSaveSucceeded) Then
                Return False
            End If
        End If
    Next
    Return True
End Function

Sub ParallelBuildAndRun()
    If (SaveAllDocuments() = True) Then
        Dim p As System.Diagnostics.Process
        Dim fileName As String
        Dim args As String

        fileName = "C:\Windows\Microsoft.NET\Framework\v3.5\MSBuild.exe"
        args = "/p:Configuration=""" _
            + DTE.Solution.SolutionBuild.ActiveConfiguration.Name _
            + """ /m """ + DTE.Solution.FullName + """"
        p = System.Diagnostics.Process.Start(fileName, args)
        p.WaitForExit()
        If (p.ExitCode = 0) Then
            ' Not even the evil DoEvents helps here.
            'Application.DoEvents()

            ' This line will crash if the output files that are 
            ' going to be debugged changed while in this macro
            DTE.Debugger.Go(False)
        End If
    End If
End Sub
...