使用DXCore控制台应用程序获取解决方案/项目中的文件列表

据我所知,在插件中使用时,可以使用以下代码段提取VS解决方案信息。

EnvDTE.Solution solution = CodeRush.ApplicationObject.Solution; EnvDTE.Projects projects = solution.Projects; 

问:我想构建一个控制台应用程序并访问这些文件详细信息。 我的目标是创建一个控制台应用程序(可以在没有VS的情况下运行),根据我在输入.sln文件中找到的设计问题生成报告。 我可以使用哪些function?

原始(和更新)post位于此处 。

实际上,DXCore不是为在Visual Studio之外使用而设计的,但总有一些解决方法……在本文中,我将向您展示如何在常规C#控制台应用程序中使用DXCore Framework来解析整个解决方案,使用抽象解析树。 解决方案应该作为参数传递给程序,作为* .sln文件的完整路径。 如果没有使用参数,则使用测试程序的硬编码路径,因此程序将自行解析并打印有关解决方案的信息,例如所使用的所有类型的列表以及每个类内部的成员数。

让我们创建一个新的C#控制台应用程序,将其命名为TestDXCoreConsoleApp并将其保存在“C:\ Project”文件夹中:

创建新的控制台应用程序

然后,我们应该将新项目的Target Framework版本更改为Framework 4.0,因此它不是“Target Framework 4.0 Client Profile”,因为一些必需的程序集引用不支持此版本的Target Framework:

设置目标框架

现在,添加必需的程序集引用。 这是我们需要的清单:

1)DXCore组件:

  • DevExpress.CodeRush.Common
  • DevExpress.CodeRush.Core
  • DevExpress.CodeRush.StructuralParser
  • DevExpress.CodeRush.VSCore
  • DevExpress.DXCore.AssemblyResolver
  • DevExpress.DXCore.Parser

这些程序集可以在DevExpress IDE Tools安装文件夹中找到。 例如,路径可能如下所示:

C:\ Program Files \ DevExpress 2011.1 \ IDETools \ System \ DXCore \ BIN

2)现在,三个额外的程序集支持不同的程序语言:

  • DX_CPPLanguage
  • DX_CSharpLanguage
  • DX_VBLanguage

使用这些程序集,我们可以解析CSharp,Visual Basic和C ++项目。 他们可以在这里找到:

C:\ Program Files(x86)\ DevExpress 2011.1 \ IDETools \ System \ DXCore \ BIN \ SYSTEM

3).NET Framework程序集:

  • Microsoft.Build.BuildEngine.dll

4)最后,有几个Visual Studio程序集:

  • EnvDTE
  • VsLangProj

这两个可以在“PublicAssemblies”文件夹中找到:

C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ PublicAssemblies \

现在,DXCore支持代码。 此代码是加载解决方案,其项目和初始化DXCore解析器所必需的。 我添加了两个文件夹:

1)Helpers文件夹包含以下类:

  • LanguageHelper.cs – 检测项目的语言(例如CSharp,Visual Basic或C ++)。
  • ParserHelper.cs – 初始化DXCore解析器和一些重要的DXCore服务 – 源模型服务和用于解析源代码的语言服务。
  • SolutionParser.cs – 一个帮助程序类,它获取要解析的解决方案的路径。 调用GetParsedSolution方法将返回SolutionElement,它包含整个解决方案的抽象源树。

2)Loaders文件夹包含Visual Studio项目和不同Visual Studio版本的解决方案加载器。 它们用于解析* .XXproj和* .sln文件。 有VS2002,VS2003和VS2005的版本。 VS2008和VS2010没有专用的加载器,因为旧的VS版本的加载器非常适合读取和加载较新的Visual Studio项目和解决方案格式文件(例如2008年,2010年)。

这是TestDXCoreConsoleApp的最终结构:

DXCore ConsoleApp结构

具有完整源代码的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(); } 

如果将源放入“C:\ Projects”文件夹并运行没有指定任何参数的程序,您应该看到以下结果:

DXCore控制台应用程序结果

按Enter键关闭窗口。 请记住,解析过程可能需要一些时间,因此您可能需要等待几秒钟,直到解析整个解决方案。