打开VS 2005解决方案文件(的.sln)到内存(Open a VS 2005 Solution

2019-06-26 15:37发布

我想开到内存中现有的.sln文件。

一个非工作方法的实施例:

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

如果我有溶液2的实例,然后我可以调用的方法打开; 但我怎么能得到溶液2的实例

我的目标是再拿到足够的项目,并读取它的一些设置...但是,很容易有机会获得解决方案。

在此先感谢,路易斯

Answer 1:

您可以通过编程创建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使得它的工作。)



Answer 2:

溶液2是一个接口,而不是一个类。 你不能直接进行类型溶液2的对象,只引用对象作为包含溶液2接口溶液2。

据我所知,实现了溶液2接口,只能作为在Visual Studio集成的接口集合的一部分,类,所以你将不得不做类似于RichieHindle提到的东西,并创建一个新的隐藏的Visual Studio实例加载溶液中。

如果你只是想抓住几个设置了SLN文件,我想可能建议自己进行解析,文件格式是非常简单的。 如果您正试图将设置出来的,机会是奇数边缘情况下解析SLN自己不工作,也不会与你正在尝试做的,如果Visual Studio的解析SLN的为你工作。



Answer 3:

我没有与这么多的经验,但尝试这个 MSDN文章。 它不是直接与你在找什么,但他们做的实例中的示例代码中的溶液2对象。



Answer 4:

Solution2等基本的Visual Studio SDK的部分,你必须与你的应用程序来重新分配(各项发牌的影响)。

由于.sln文件是普通的旧XML,你总是可以在打开它XmlDocument ,然后XPath的进去。



文章来源: Open a VS 2005 Solution File (.sln) into memory