.NET çözümlerinde güncelleştirmeler gerçekleştiren bazı araçlara sahibim, ancak çözümün bulunduğu dizini bilmeleri gerekiyor.Program aracılığıyla Visual Studio IDE çözüm dizinini eklentilerden alma
Bu araçları, IDE Tools menüsünde göründükleri ve bir argüman olarak $(SolutionDir)
ürününü sağladıkları Harici Araçlar olarak ekledim. Bu iyi çalışıyor. Ancak, bu araçların kullanıcı için özel bir üst düzey menü aracılığıyla (bir Visual Studio tümleştirme paketi projesi oluşturduğum) ve çözüm düğümlerindeki bir içerik menüsü aracılığıyla kullanıcı IDE'sinde daha kolay erişilmesini istiyorum (bunun için). Bir Visual Studio eklenti projesi oluşturdum). Bu bağlamda mevcut çözüm dizinini bulmanın bir yolunu arıyorum.
VisualStudio.DTE
nesneden çözüm bilgi almak çalıştı:
EnvDTE.DTE dte = (EnvDTE.DTE)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE");
string solutionDir = System.IO.Path.GetDirectoryName(dte.Solution.FullName);
Ancak bu eklenti ins değil şimdiki çözüm için çözüm dizinini döndürür. Bu değil şimdiki çözüm, IDE için dizin döndü
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();
Ama:
Ben$(SolutionDir)
yankılanan ve geri okuma çalıştı.
Çözüm düğümü CommandBar
ile ilgili herhangi bir bilgi görmedim. Alternatif olarak, tanımlanan Visual Studio dış araçlarına programsal olarak erişmenin ve bunları başlatmanın bir yolu olsaydı (önceden tanımlanan makro argümanlarını kullanarak), bu işe yarayacaktı.
Çözüm nedir?
görünüşte bu DTE delilik lol – Terrance