C# 使用DXCore控制台应用程序获取解决方案/项目中的文件列表
我知道,当在插件中使用时,可以使用以下代码片段提取VS解决方案信息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文件中找到的设计问题生成一个报告。我使用什么功能来完成此任务?原始
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
- 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
- 恩夫特
- VsLangProj
- LanguageHelper.cs-检测项目的语言(例如CSharp、Visual Basic或C++)
- cs-初始化DXCore解析器和一些重要的DXCore服务,即用于解析源代码的源模型服务和语言服务
- SolutionParser.cs—一个助手类,它获取要解析的解决方案的路径。调用GetParsedSolution方法将返回SolutionElement,它保存整个解决方案的抽象源代码树
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你能推荐你吗