EnvDTE.Solution solution = CodeRush.ApplicationObject.Solution;
EnvDTE.Projects projects = solution.Projects;
问:我想建立一个控制台应用程序并访问这些文件的详细信息。我的目标是创建一个控制台应用程序(可以在没有VS的情况下运行),根据输入.sln文件中发现的设计问题生成报告。我应该使用哪些函数来实现这一目标?
EnvDTE.Solution solution = CodeRush.ApplicationObject.Solution;
EnvDTE.Projects projects = solution.Projects;
问:我想建立一个控制台应用程序并访问这些文件的详细信息。我的目标是创建一个控制台应用程序(可以在没有VS的情况下运行),根据输入.sln文件中发现的设计问题生成报告。我应该使用哪些函数来实现这一目标?
原始(更新后的)帖子位于此处。
实际上,DXCore 不是设计用于在 Visual Studio 之外使用的,但总有解决方法…… 在本文中,我将向您展示如何在常规 C# 控制台应用程序中使用 DXCore Framework 解析整个解决方案并使用抽象解析树进行操作。解决方案应作为完整路径传递给程序作为参数传入 *.sln 文件。如果未使用参数,则使用测试程序的硬编码路径,因此程序将解析自身并打印有关解决方案的信息,例如所有使用的类型列表以及每个类内的成员数量。
让我们创建一个新的 C# 控制台应用程序,命名为 TestDXCoreConsoleApp 并将其保存在“C:\Project”文件夹中:
接下来,我们需要将新项目的目标框架版本更改为Framework 4.0,而不是"目标框架4.0客户端配置文件",因为一些必需的程序集引用不支持此目标框架版本:
现在,让我们添加必需的程序集引用。以下是我们需要的列表:这些程序集可以在您的DevExpress IDE工具安装文件夹中找到。例如,路径可能如下:
C:\Program Files\DevExpress 2011.1\IDETools\System\DXCore\BIN
有了这些程序集,我们就能够解析CSharp、Visual Basic和C++项目。它们可以在以下位置找到:
C:\Program Files (x86)\DevExpress 2011.1\IDETools\System\DXCore\BIN\SYSTEM
C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies\
Now, the DXCore support code. This code is required to load a solution, its projects and initialize DXCore parsers. I've added two folders:完整源代码的TestDXCoreConsoleApp在这里(267,457字节,C#,VS2010)可以查看,您可以审查代码并根据需要使用它。以下是Program类的Main函数:
static void Main(string[] args)
{
string SolutionPath;
if (args != null && args.Length > 0)
SolutionPath = args[0];
else
SolutionPath = @"c:\Projects\TestDXCoreConsoleApp\TestDXCoreConsoleApp.sln";
try
{
ParserHelper.RegisterParserServices();
Console.Write("Parsing solution... ");
SolutionParser solutionParser = new SolutionParser(SolutionPath);
SolutionElement solution = solutionParser.GetParsedSolution();
if (solution == null)
return;
Console.WriteLine("Done.");
foreach (ProjectElement project in solution.AllProjects)
foreach (SourceFile file in project.AllFiles)
foreach (TypeDeclaration type in file.AllTypes)
{
Console.Write(type.FullName);
Console.WriteLine(", members: " + ((ITypeElement)type).Members.Count);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
ParserHelper.UnRegisterParserServices();
}
Console.ReadLine();
}
按下回车键关闭窗口。请注意,解析过程可能需要一些时间,因此您可能需要等待几秒钟,直到整个解决方案被解析。