如何解决使用DXCore控制台应用程序获取解决方案/项目中的文件列表
|| 据我了解,在插件中使用以下代码片段可以提取VS解决方案信息。EnvDTE.Solution solution = CodeRush.ApplicationObject.Solution;
EnvDTE.Projects projects = solution.Projects;
问:我想构建一个控制台应用程序并访问这些文件详细信息。我的目的是创建一个控制台应用程序(可以在不使用VS的情况下运行)以根据我在输入.sln文件中发现的设计问题生成报告。我为此使用什么功能?
解决方法
原始(和更新的)帖子位于此处。
实际上,DXCore并不是为在Visual Studio之外使用而设计的,但是总有变通方法...在本文中,我将向您展示如何在常规C#控制台应用程序中使用DXCore框架来解析整个解决方案并使用抽象的解析树。解决方案应作为程序的参数传入* .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_CPPL语言
DX_CSharpLanguage
DX_VB语言
使用这些程序集,我们可以解析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程序集:
环境技术
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服务-用于解析源代码的Source Model服务和Language服务。
SolutionParser.cs-一个帮助程序类,它采用您要解析的解决方案的路径。调用GetParsedSolution方法将返回SolutionElement,其中包含整个解决方案的抽象源树。
2)Loaders文件夹包含Visual Studio项目和针对不同Visual Studio版本的解决方案加载器。它们用于解析* .XXproj和* .sln文件。有VS2002,VS2003和VS2005的版本。没有专用于VS2008和VS2010的加载器,因为用于旧VS版本的那些加载器非常适合读取和加载新的Visual Studio项目和解决方案格式文件(例如2008、2010)。
这是TestDXCoreConsoleApp的最终结构:
带有完整源代码的TestDXCoreConsoleApp在这里(267,457字节,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键关闭窗口。请记住,解析过程可能需要一些时间,因此您可能需要等待几秒钟,直到解析整个解决方案为止。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。