首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用DXCore控制台应用程序获取解决方案/项目中的文件列表

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

Stack Overflow用户
提问于 2011-05-30 23:18:26
回答 1查看 1.9K关注 0票数 4

我知道,当在插件中使用时,可以使用以下片段来提取VS解决方案信息。

代码语言:javascript
复制
EnvDTE.Solution solution = CodeRush.ApplicationObject.Solution;
EnvDTE.Projects projects = solution.Projects;

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-03 03:23:23

最初的(和更新后的)帖子位于here

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

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

然后,我们应该将新项目的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集成开发工具安装文件夹中找到。例如,路径可能如下所示:

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框架组装:

  • Microsoft.Build.BuildEngine.dll

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

  • EnvDTE
  • VsLangProj

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

C:\Program Files (x86)\Microsoft Visual Studio10.0\Common7\IDE\PublicAssemblies\

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

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

  • LanguageHelper.cs -检测项目的语言(例如,CSharp、Visual Basic或C++).
  • ParserHelper.cs )-初始化DXCore解析器,以及一些重要的DXCore服务-用于解析源代码的源模型服务和语言服务-一个助手类,它采用您要解析的解决方案的路径。调用GetParsedSolution方法将返回SolutionElement,它保存整个解决方案的抽象源代码树。

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

下面是TestDXCoreConsoleApp的最终结构:

包含完整源代码的TestDXCoreConsoleApp是here (267,457字节,C#,VS2010),因此您可以查看代码并随心所欲地使用它。以下是Program类的主要函数:

代码语言:javascript
复制
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“文件夹中,并且在没有指定任何参数的情况下运行该程序,您应该会看到以下结果:

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

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6178043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档