37

私はカスタムツールを書いていますが、現在、機能に関しては私が望むことをしています。何か問題が発生した場合は、Visual Studio に書き込みできるようにしたいと考えています。(不適切な形式のコードなど)。

これに関する基準はありますか?今のところ、基本的にツールを強制的に失敗させることができ、Visual Studio は失敗したことを警告します。出力ウィンドウに、送信したい結果のメッセージを含むカテゴリが必要です。エラーリストウィンドウで、より説明的なタスク/警告を表示することもできます。

4

6 に答える 6

9

実行中のインスタンスMarshal.GetActiveObjectを取得するために使用する別の方法があります。DTE2

最初にEnvDTEとenvdte80を参照します。これは現在VisualStudio2012で機能しますが、他のものはまだ試していません。

using System;
using System.Runtime.InteropServices;
using EnvDTE;
using EnvDTE80;

internal class VsOutputLogger
{
    private static Lazy<Action<string>> _Logger = new Lazy<Action<string>>( () => GetWindow().OutputString );

    private static Action<string> Logger
    {
        get { return _Logger.Value; }
    }

    public static void SetLogger( Action<string> logger )
    {
        _Logger = new Lazy<Action<string>>( () => logger );
    }

    public static void Write( string format, params object[] args)
    {
        var message = string.Format( format, args );
        Write( message );
    }

    public static void Write( string message )
    {
        Logger( message + Environment.NewLine );
    }

    private static OutputWindowPane GetWindow()
    {
        var dte = (DTE2) Marshal.GetActiveObject( "VisualStudio.DTE" );
        return dte.ToolWindows.OutputWindow.ActivePane;
    }
}
于 2012-06-10T15:13:03.297 に答える
4

出力ウィンドウに何かを表示したい場合は、stdout から取得する必要があります。これを行うには、アプリを「コンソール」アプリとしてリンクする必要があります。プロジェクトのプロパティ ページで /SUBSYSTEM:CONSOLE フラグを設定し、Linker/System の下で SubSystem プロパティを CONSOLE に設定します。

ウィンドウに出力が表示されたら、「Error:」というテキストを含めるとエラーとして表示され、「Warning:」を設定すると警告として表示されます。エラー テキストがパス/ファイル名で始まり、その後に括弧で囲まれた行番号が続く場合、IDE はそれを「クリック可能な」エラーとして認識し、エラーのある行に自動的に移動します。

于 2009-07-07T21:46:31.863 に答える
0

Debug および/または Trace クラスを使用できます。ここにいくつかの情報があります: http://msdn.microsoft.com/en-us/library/bs4c1wda(VS.71).aspx

幸運を祈ります。

于 2009-07-07T19:42:04.830 に答える
-4

使用するSystem.Diagnostics.Debugger.Message

于 2012-04-09T19:47:49.880 に答える