Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用DXCore控制台应用程序获取解决方案/项目中的文件列表_C#_Plugins_Coderush_Dxcore - Fatal编程技术网

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

C# 使用DXCore控制台应用程序获取解决方案/项目中的文件列表,c#,plugins,coderush,dxcore,C#,Plugins,Coderush,Dxcore,我知道,当在插件中使用时,可以使用以下代码片段提取VS解决方案信息 EnvDTE.Solution solution = CodeRush.ApplicationObject.Solution; EnvDTE.Projects projects = solution.Projects; 问:我想构建一个控制台应用程序并访问这些文件详细信息。我的目标是创建一个控制台应用程序(可以在没有VS的情况下运行),根据我在input.sln文件中找到的设计问题生成一个报告。我使用什么功能来完成此任务?原始

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

EnvDTE.Solution solution = CodeRush.ApplicationObject.Solution;
EnvDTE.Projects projects = solution.Projects;
问:我想构建一个控制台应用程序并访问这些文件详细信息。我的目标是创建一个控制台应用程序(可以在没有VS的情况下运行),根据我在input.sln文件中找到的设计问题生成一个报告。我使用什么功能来完成此任务?

原始(和更新)帖子位于

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

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

然后,我们应该将新项目的目标框架版本更改为框架4.0,因此它不是“目标框架4.0客户端配置文件”,因为某些必需的程序集引用不支持此版本的目标框架:

现在,让我们添加所需的程序集引用。以下是我们需要的列表:

1) DXCore组件:

  • DevExpress.coderash.Common
  • DevExpress.coderash.Core
  • DevExpress.coderrush.xml
  • DevExpress.coderash.VSCore
  • DevExpress.DXCore.AssemblyResolver
  • DevExpress.DXCore.Parser
这些程序集可以在DevExpress IDE工具安装文件夹中找到。例如,路径可能如下所示:

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

2) 现在,为不同的程序语言支持增加三个程序集:

  • DX_语言
  • DX_csharp语言
  • DX\VBU语言

使用这些程序集,我们可以解析CpHARP、VisualBasic和C++项目。它们可以在这里找到:

C:\ProgramFiles(x86)\DevExpress 2011.1\IDETools\System\DXCore\BIN\System

3) .NET Framework程序集:

  • Microsoft.Build.BuildEngine.dll
4) 最后,还有几个Visual Studio程序集:

  • 恩夫特
  • VsLangProj
可以在“PublicAssemblys”文件夹中找到这两个:

C:\ProgramFiles(x86)\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssembly\

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

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

  • LanguageHelper.cs-检测项目的语言(例如CSharp、Visual Basic或C++)
  • 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的最终结构:

源代码完整的TestDXCoreConsoleApp是(267457字节,C#,VS2010),因此您可以查看代码并根据需要使用它。下面是Program类的主要功能:

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键关闭窗口。请记住,解析过程可能需要一些时间,因此您可能需要等待几秒钟,直到整个解决方案被解析。

我想给出解决方案的位置,并作为控制台应用程序而不是插件(类库)访问其所有项目文件。这是一项相当复杂的任务,因为DXCore不是为在Visual Studio环境之外使用而设计的。谢谢Alex。但我也可以在控制台应用程序中使用大多数函数。我能够按顺序解析多个文件,但我想输入一个解决方案文件,然后处理其中的所有文件。你能告诉我这项任务有多复杂吗??感谢soutside,DXCore可以解析文件(或整个解决方案),因此您可以枚举解决方案元素,获取它们的特征(例如代码度量),并生成代码。但是,您不能使用DXCore API来更改文件,并且没有可用的DXCore服务(可通过CodeRush.XXX方法访问)。另一方面,可以模拟DXCore服务,但必须完全重写它们。我将在我的站点上创建一篇关于如何在VisualStudio之外使用DXCore的博客文章。这将需要编写大量代码,如果一切按预期进行,我也将与大家分享。@Alex。这将是非常有帮助的使用DXCore的外部使用VS也。但我至少可以解析整个解决方案。我尝试了以下方法,但没有成功:
CSharp30Parser SolnParser=new CSharp30Parser();fileNode=SolnParser.ParseFile(solnPath)作为SolutionElement