视觉工作室文件解析器
我想找到一种方法来编写一个视觉工作室“的东西”,或使用一个工具,让我分析每一行,所以我可以添加自定义代码围绕其他代码,我会用我自己的算法进行检查。视觉工作室文件解析器
基本上,我想从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(例如int
与Int32
),这个主循环:
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
你可以看看Visual Studio Automation extension点
,或者你可以后期处理所有的文件..想你提到的复制/粘贴的解决方案,但不是复制/粘贴您读取文件关闭磁盘并将其写回。这可能是由文件修改或用户交互触发的。
这个概念看起来很接近,但我真的想在文件中运行这个“工具”我正在努力,而不是一次完成整个项目,这有可能吗? – user1533223 2012-07-18 00:20:37
@ user1533223:是的,使用IDE扩展。 – user7116 2012-07-18 00:37:51