.NET ソリューションの更新を実行するツールがいくつかありますが、ソリューションが配置されているディレクトリを知る必要があります。
これらのツールを外部ツールとして追加し、IDE ツール メニューに表示$(SolutionDir)
され、引数として指定しました。これはうまくいきます。
ただし、カスタム トップ レベル メニュー (Visual Studio 統合パッケージ プロジェクトを作成) およびソリューション ノードのコンテキスト メニュー (Visual Studio 統合パッケージ プロジェクトを作成) を介して、IDE でこれらのツールにアクセスしやすくしたいと考えていますStudio アドイン プロジェクト)。これらのコンテキストを通じて現在のソリューション ディレクトリを取得する方法を探しています。
VisualStudio.DTE
オブジェクトからソリューション情報を取得しようとしました:
EnvDTE.DTE dte = (EnvDTE.DTE)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE");
string solutionDir = System.IO.Path.GetDirectoryName(dte.Solution.FullName);
ただし、これは現在のソリューションではなく、アドインのソリューション ディレクトリを返します。
エコー$(SolutionDir)
して読み返してみました:
System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo("cmd", "echo $(SolutionDir)");
// The following commands are needed to redirect the standard output.
// This means that it will be redirected to the Process.StandardOutput StreamReader.
procStartInfo.RedirectStandardOutput = true;
procStartInfo.UseShellExecute = false;
// Do not create the black window.
procStartInfo.CreateNoWindow = true;
// Now we create a process, assign its ProcessStartInfo and start it
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo = procStartInfo;
proc.Start();
// Get the output into a string
string result = proc.StandardOutput.ReadToEnd();
ただし、これは現在のソリューションではなく、IDE のディレクトリを返しました。
ソリューション ノードに関連情報が表示されませんでしたCommandBar
。
または、定義済みの Visual Studio 外部ツールにプログラムでアクセスし、(既に定義されているマクロ引数を使用して) それらを起動する方法があれば、それは機能します。
解決策は何ですか?