2

我想將一個現有的.sln文件打開到內存中。非工作方法打開VS 2005解決方案文件(.sln)到內存中

實施例:

private Solution2 OpenSolution(string filePath) 
{ 
    Solution2 sln; 
    sln.Open(filePath); 
    return sln; 
} 

如果我有溶液2的一個實例然後我可以調用的方法打開;但我如何獲得Solution2的實例?

我的目標是獲得足夠的項目並閱讀其中的一些設置......但訪問解決方案很容易。

由於提前, 路易斯

+1

這是什麼情況?可以打開解決方案,還是有一個已經打開,無法關閉?您的項目是作爲Visual Studio加載項,VSPackage還是作爲單獨的應用程序運行? – 2009-08-10 09:57:56

+0

在另一個應用程序中,我想打開任何給定的VS解決方案。 @RichieHindle答案是完美的我的情況。 謝謝 – 2009-08-20 15:52:51

回答

3

您可以通過編程創建Visual Studio的隱藏實例,然後使用它來操縱您的解決方案。這個例子將列出給定解決方案中的所有項目。

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

namespace so_sln 
{ 
    class Program 
    { 
     [STAThread] 
     static void Main(string[] args) 
     { 
     System.Type t = System.Type.GetTypeFromProgID("VisualStudio.DTE.8.0", true); 
     DTE2 dte = (EnvDTE80.DTE2)System.Activator.CreateInstance(t, true); 

     // See http://msdn.microsoft.com/en-us/library/ms228772.aspx for the 
     // code for MessageFilter - just paste it into the so_sln namespace. 
     MessageFilter.Register(); 

     dte.Solution.Open(@"C:\path\to\my.sln"); 
     foreach (Project project in dte.Solution.Projects) 
     { 
      Console.WriteLine(project.Name); 
     } 

     dte.Quit(); 
     } 
    } 

    public class MessageFilter : IOleMessageFilter 
    { 
     ... Continues at http://msdn.microsoft.com/en-us/library/ms228772.aspx 

(與STAThread和的MessageFilter的廢話「因爲線程外部多線程應用程序和Visual Studio之間的競爭問題」,這意味着什麼。從http://msdn.microsoft.com/en-us/library/ms228772.aspx代碼使得它的工作粘貼。)

-1

Solution2等基本的Visual Studio SDK的部分,你必須與你的應用程序來重新分配(各項發牌的影響)。

由於.sln文件是普通的舊XML,您可以隨時在XmlDocument中打開它,然後將XPath打開。

+0

我真的想作爲Solution2實例訪問.sln文件。然後我希望能夠使用已由Visual Studio開發人員提供的方法 – 2009-07-23 15:43:34

+5

.sln不是XML。 .proj是XML文件 – Jehof 2009-08-10 09:54:03

0

我沒有太多的經驗,但嘗試this MSDN文章。它不是直接查找的內容,而是在示例代碼中實例化一個solution2對象。

1

Solution2是一個接口,而不是一個類。您不能直接生成Solution2類型的對象,只能將對象引用爲包含Solution2接口的Solution2。

據我所知,實現Solution2接口的類僅作爲Visual Studio集成中接口集合的一部分提供,因此您必須執行類似於RichieHindle提到的操作,並創建一個新的隱藏Visual Studio實例來加載解決方案。

如果您只是想從sln文件中抓取一些設置,我可能會推薦自己解析它,文件格式非常簡單。如果你正在嘗試設置一個設置,很可能會出現奇怪的邊界情況,即如果Visual Studio爲你解析sln,解析sln時你自己也無法正常工作。

相關問題