视觉工作室文件解析器

问题描述:

我想找到一种方法来编写一个视觉工作室“的东西”,或使用一个工具,让我分析每一行,所以我可以添加自定义代码围绕其他代码,我会用我自己的算法进行检查。视觉工作室文件解析器

基本上,我想从Visual Studio代码编辑器中获取当前文件的readtext,然后用我的修改后的代码替换为新版本。

看着resharper,宏,无法想出办法做到这一点,我不想从文件中复制所有代码,将其粘贴到我将写入的Windows应用程序窗体中,然后复制粘贴背部。有任何想法吗?

感谢

我建议使用Roslyn来完成此任务。它提供了读取解决方案,项目的设施,然后将其内部的源文件实现为其组成语法或语义树。 Eric Lippert covered the CTP在他的博客(重点是我的):

Roslyn是一个代码分析API的库,用于构建编译器,开发环境,重构引擎等。它支持C#和Visual Basic的词法,语法和语义分析。 而且很棒。

您还可以使用Roslyn to create IDE Extensions,包括创建您自己的重构工具:

要扩展Visual Studio IDE中,编辑服务API公开了一组扩展点,以现有的语言服务功能。其中的几个例子包括完成列表,代码概要,突出显示引用,语法分类器和代码重构。对于这些扩展中的每一个,您都需要创建自己的MEF提供程序,并确保至少有一个Export *属性描述有关提供程序的重要细节。

在最少的代码量another question I demonstrated substituting type names(例如intInt32),这个主循环:

var workspace = Workspace.LoadSolution(path); 
var solution = workspace.CurrentSolution; 
foreach (var project in solution.Projects 
    .Where(prj => prj.LanguageServices.Language == "C#")) 
{ 
    foreach (var doc in project.Documents 
     .Where(d => d.SourceCodeKind == SourceCodeKind.Regular 
       && d.LanguageServices.Language == "C#")) 
    { 
     var tree = SyntaxTree.ParseCompilationUnit(
      doc.GetText(), 
      doc.DisplayName); 

     // Update the syntax tree 
     var newTree = UpdatePredefinedTypes(tree); 

     solution = solution.UpdateDocument(doc.Id, newTree.Text); 
    } 
} 

workspace.ApplyChanges(workspace.CurrentSolution, solution); 
// When you run this on a project open in VS it notices the changes 
+0

这个概念看起来很接近,但我真的想在文件中运行这个“工具”我正在努力,而不是一次完成整个项目,这有可能吗? – user1533223 2012-07-18 00:20:37

+0

@ user1533223:是的,使用IDE扩展。 – user7116 2012-07-18 00:37:51

你可以看看Visual Studio Automation extension

,或者你可以后期处理所有的文件..想你提到的复制/粘贴的解决方案,但不是复制/粘贴您读取文件关闭磁盘并将其写回。这可能是由文件修改或用户交互触发的。