0

Roslyn のワークスペースを使用して、Visual Studio が提供するアクティブな IWorkspace へのフックを取得する方法はありますか?

Visual Studio で ExampleProject を開くことができるようにしたいのですが、自分のアプリケーションで を介して ExampleProject を再度開きたいのですRoslyn.Services.Workspaceが、Visual Studio で生成されたファイル/コードの変更を監視するためだけです。プロジェクトをワークスペースにロードするだけの有望なテストを実行し、何らかの方法でディスクから魔法のように変更を取得することを望んでいましたが、そのような運はありませんでした。

唯一の可能性は次のとおりです。

  1. 現在読み込まれているワークスペースへの参照を Visual Studio から直接取得します。VSがプロセスの境界を越えてこれを公開するかどうか、またはその方法を見つける方法はわかりません。

  2. プロジェクト全体を Visual Studio 拡張機能として作り直し、開いているワークスペースに自動的にアクセスできるようにします。私は今、拡張機能の構築に飛び込みたくありません。

テストに使用しているコードは次のとおりです。

public class ProjectDiskMonitor
{
    public ProjectDiskMonitor(string fullProjectPath)
    {
        WS = Workspace.LoadStandAloneProject(fullProjectPath, null, null, null, true) as Workspace;
        WS.WorkspaceChanged += new EventHandler<WorkspaceEventArgs>(TargetProjectChanged);
//this event is not being fired as I edit the project via another instance of VS

    }

    private void TargetProjectChanged(object sender, WorkspaceEventArgs e)
    {
        Console.WriteLine("Project changed");
    }

    private Workspace WS
    {
        get;
        set;
    }
}
4

1 に答える 1

1

Workspace.LoadSolution() を呼び出してワークスペースを取得する場合、LoadSolution の enableFileTracking パラメータに「true」を渡すと、自動的にファイルシステムをリッスンして変更を取得します。ISolution インスタンスは不変であることを忘れないでください。新しい状態を取得するには、Workspace の CurrentSolution プロパティにアクセスして、更新された状態を取得する必要があります。

Visual Studio からクロスプロセス方式で IWorkspace を取得する現在の方法はありません。少なくとも、独自のリモート プロトコルを構築しない限りは不可能です。

于 2012-07-31T03:02:07.410 に答える