我想开到内存中现有的.sln文件。
一个非工作方法的实施例:
private Solution2 OpenSolution(string filePath)
{
Solution2 sln;
sln.Open(filePath);
return sln;
}
如果我有溶液2的实例,然后我可以调用的方法打开; 但我怎么能得到溶液2的实例 ?
我的目标是再拿到足够的项目,并读取它的一些设置...但是,很容易有机会获得解决方案。
在此先感谢,路易斯
我想开到内存中现有的.sln文件。
一个非工作方法的实施例:
private Solution2 OpenSolution(string filePath)
{
Solution2 sln;
sln.Open(filePath);
return sln;
}
如果我有溶液2的实例,然后我可以调用的方法打开; 但我怎么能得到溶液2的实例 ?
我的目标是再拿到足够的项目,并读取它的一些设置...但是,很容易有机会获得解决方案。
在此先感谢,路易斯
您可以通过编程创建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使得它的工作。)
溶液2是一个接口,而不是一个类。 你不能直接进行类型溶液2的对象,只引用对象作为包含溶液2接口溶液2。
据我所知,实现了溶液2接口,只能作为在Visual Studio集成的接口集合的一部分,类,所以你将不得不做类似于RichieHindle提到的东西,并创建一个新的隐藏的Visual Studio实例加载溶液中。
如果你只是想抓住几个设置了SLN文件,我想可能建议自己进行解析,文件格式是非常简单的。 如果您正试图将设置出来的,机会是奇数边缘情况下解析SLN自己不工作,也不会与你正在尝试做的,如果Visual Studio的解析SLN的为你工作。
我没有与这么多的经验,但尝试这个 MSDN文章。 它不是直接与你在找什么,但他们做的实例中的示例代码中的溶液2对象。
Solution2
等基本的Visual Studio SDK的部分,你必须与你的应用程序来重新分配(各项发牌的影响)。
由于.sln
文件是普通的旧XML,你总是可以在打开它XmlDocument
,然后XPath的进去。