0

我正在尝试找到一种方法来编写视觉工作室“东西”,或者使用那里的工具,它允许我解析每一行,以便我可以在其他代码周围添加自定义代码,我将使用我自己的算法进行检查。

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

看着 resharper,宏,想不出办法做到这一点,我不想从文件中复制所有代码,将其粘贴到我要编写的 Windows 应用程序表单中,然后复制粘贴回来。有任何想法吗?

谢谢

4

2 回答 2

1

我建议使用Roslyn来完成这项任务。它提供了读取解决方案和项目的工具,然后将其中的源文件实现为它们的组成语法或语义树。Eric Lippert在他的博客上介绍了 CTP(重点是我的):

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

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

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

另一个问题中,我演示了用这个主循环在最少量的代码中替换类型名称(例如intwith ):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
于 2012-07-17T23:44:15.523 回答
0

您可以查看Visual Studio 自动化扩展

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

于 2012-07-17T23:44:05.227 回答