2011-03-08 4 views
0

매크로 실행 중에 문제가 발생하면 매크로를 사용자에게 알리고 자합니다. Visual Studio 오류 목록에 항목을 추가 할 수 있는지 궁금합니다.매크로의 오류 목록에 항목을 추가하십시오.

AddIn (예 : here) 내에서 그렇게 할 수 있지만 매크로에서 동일한 작업을 수행하고 싶습니다.

편집, 여기에 (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 오류 목록에 오류를 넣고 싶습니다.

+0

나는 당신의 필요 무엇인지 확실하지 않다 비주얼 스튜디오에서 오류 목록을 탐색 오류를 추가합니다. 매크로 실행이 매크로 확장을 의미합니까? 대답이 확실하면 #error를 사용하여 컴파일 타임 오류 메시지를 생성합니다. 그렇지 않으면 프로세스가 실행 중일 때 왜 Visual Studio 오류 목록에 오류를 추가하려고합니까? – xjdrew

+0

매크로를 실행하면 Tools/Macros/Run 매크로로 실행하거나 매크로 탐색기에서 호출하는 것을 의미합니다 (Alt + f8 || Tools/Macros/MacroExplorer). – m0sa

답변

2

add an item in the Task List 매크로에서 쉽게 확인할 수 있습니다. 해당 기사에서 AddTaskToList 메소드를 사용하고 m_objDTE를 DTE로 변경하십시오. 나는 그것을 시험해 보았고 효과가 있었다.

그러나 오류 목록에 항목을 추가하는 것은 불가능합니다. VS 서비스에 전화해야합니다 (how adding an error is done in an add-in 참조). 이 코드에서 매크로를 만들었고 작동하지 않았습니다. 일반적으로 VS 서비스는 매크로에서 작동하지 않습니다. 나는 ErrorListProvider를 성공적으로 만들 수 있었다. 나는 그것의 메소드와 속성에 접근 할 수있다. 그러나 ErrorListProvider.Task.Add를 호출하면 COM 예외가 발생합니다. 여러 가지 메모를 가지고 놀고 싶다면 : 문서에 설명 된대로 get 4 assemblies out of the GAC 등이 필요합니다. c : \ dlls \ 디렉토리. 매크로 IDE는 참조 추가시 찾아보기를 허용하지 않으므로이 DLL을 ... \ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ PublicAssemblies 디렉토리에 복사해야합니다 (10.0을 VS 버전으로 변경). 그런 다음 매크로 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 확인을 보인다. 추가가 실패합니다.

+0

그렇다고 불가능하다고 말하고 있습니다. 누군가가 그것을 작동시킬 수 있는지 좀 더 기다려 볼 것입니다. 현상금을 얻지 못한다면, 내가 한 것보다 조금 더 멀리 있기 때문에. 감사. – m0sa

2

나는 자신의 출력 창에 뭔가를 출력하는 것이 더 적합하다고 생각합니다. 오류 목록은 일반적으로 사용자가 작업중인 프로젝트의 오류에 사용되며 매크로를 실행하여 발생하는 오류에는 사용되지 않습니다. 특히 누군가 할 수 없다고 말하면. :)

자신의 출력 패널로 출력하는 것은 매우 간단합니다 :이 도움이

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) 

희망.

건배,

Sebastiaan