Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# VisualStudio文件解析器_C#_Visual Studio 2010 - Fatal编程技术网

C# VisualStudio文件解析器

C# VisualStudio文件解析器,c#,visual-studio-2010,C#,Visual Studio 2010,我正试图找到一种方法来编写一个VisualStudio“东西”,或者使用一个工具,它允许我解析每一行,这样我就可以在我将使用自己的算法检查的其他代码周围添加自定义代码 基本上,我希望从VisualStudio代码编辑器中获取当前文件的readtext,然后用修改后的代码替换为新的verson 看看resharper,宏,我想不出一种方法来实现这一点,我不想复制一个文件中的所有代码,将其粘贴到我要编写的windows应用程序表单中,然后复制粘贴回来。有什么想法吗 谢谢你可以看看要点 或者您可以对所

我正试图找到一种方法来编写一个VisualStudio“东西”,或者使用一个工具,它允许我解析每一行,这样我就可以在我将使用自己的算法检查的其他代码周围添加自定义代码

基本上,我希望从VisualStudio代码编辑器中获取当前文件的readtext,然后用修改后的代码替换为新的verson

看看resharper,宏,我想不出一种方法来实现这一点,我不想复制一个文件中的所有代码,将其粘贴到我要编写的windows应用程序表单中,然后复制粘贴回来。有什么想法吗

谢谢你可以看看要点

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

我建议使用。它提供了读取解决方案、项目的工具,然后将其中的源文件实现为它们的组成语法或语义树。在他的博客上(我的):

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

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

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

在(例如,
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

这个概念看起来非常接近,但我真的很想在我正在处理的文件上运行这个“工具”,而不是同时在整个项目上运行,这可能吗?@user1533223:是的,使用IDE扩展名。在Visual Studio代码中解析文件的意思是什么@萨姆·埃克斯