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时你自己也无法正常工作。

相关问题