0

マクロの実行中に何か問題が発生した場合、マクロのユーザーに通知したい。Visual Studio のエラー リストに項目を追加できるかどうか疑問に思っていました。

AddIn 内から実行することもできますが (ここのように)、マクロから同じことを実行したいと考えています。

編集


私が達成したいことをさらに明確にするために、サンプル マクロ ライブラリのサンプルを次に示します (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 エラー リストに入れたいと思います。

4

3 に答える 3

2

マクロからタスクリストに項目を簡単に追加できます。その記事のAddTaskToListメソッドを使用して、m_objDTEをDTEに変更するだけです。私はそれを試しましたが、うまくいきました。

ただし、エラーリストに項目を追加することはおそらく不可能です。VSサービスを呼び出す必要があります。アドインでエラーを追加する方法を確認してください。このコードからマクロを作成しましたが、機能しませんでした。一般に、VSサービスはマクロでは機能しません。ErrorListProviderを正常に作成できました。そのメソッドとプロパティにアクセスできました。ただし、ErrorListProvider.Task.Addを呼び出すと、COM例外が発生しました。それを試してみたい場合は、いくつかの注意事項:記事で説明されているように、GACから4つのアセンブリを取得する必要がありますたとえば、c:\dlls\ディレクトリに移動します。Macros IDEでは、参照を追加するときに参照できないため、これらのdllを... \ 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は失敗します。

于 2011-03-16T10:57:16.890 に答える
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)

お役に立てれば。

乾杯、

セバスチャン

于 2011-03-17T11:02:44.783 に答える
0

これはあなたが望むものではありませんか?

方法: Visual Studio アドインからエラー一覧へのナビゲーションを使用してエラーを追加する

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

于 2014-10-03T15:48:11.230 に答える