Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.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#代码_C#_.net_Codedom - Fatal编程技术网

如何以编程方式解析和修改C#代码

如何以编程方式解析和修改C#代码,c#,.net,codedom,C#,.net,Codedom,我想做的是阅读C代码,解析它,插入一些方法调用,最后编译它 是否可以将C源代码(字符串列表)转换为CodeDOM对象?试试。这太棒了。这可能就是您想要的。试试看使用核心.NET框架不可能直接做到这一点。您需要使用第三方或附加工具,例如: 开源C#解析器: GPLEX与一个: 如果您希望能够解析C#源代码(或各种其他语言)并对其执行任意分析和转换,请查看我们的 DMS有一个完整的C#前端,为解析的代码(但不是CodeDom)构建完整的抽象语法树,为遍历/检查/更改AST提供完整的过程API。修改

我想做的是阅读C代码,解析它,插入一些方法调用,最后编译它


是否可以将C源代码(字符串列表)转换为CodeDOM对象?

试试。这太棒了。

这可能就是您想要的。

试试看

使用核心.NET框架不可能直接做到这一点。您需要使用第三方或附加工具,例如:

  • 开源C#解析器:
  • GPLEX与一个:

如果您希望能够解析C#源代码(或各种其他语言)并对其执行任意分析和转换,请查看我们的

DMS有一个完整的C#前端,为解析的代码(但不是CodeDom)构建完整的抽象语法树,为遍历/检查/更改AST提供完整的过程API。修改树后,DMS可以重新生成与修改后的树相对应的源代码,可以在保真模式下尝试保留原始间距,也可以在预打印模式下应用可完全控制的预打印样式。注释正确地保留在重新生成的源中


此外,DMS还提供源代码级模式匹配和转换(例如,您可以编写“x=x+1==>x++”,而不是对所有遍历树进行编码以进行验证,对树进行黑客攻击以进行更改。)查看以了解为什么这项工作要少得多。

这是一个非常古老的问题,但值得注意的是,公认的答案不再适用。Microsoft最近的项目明确地旨在公开编译器在静态分析代码库的过程中获得的关于代码库的所有知识,并通过托管API公开所有这些信息,供您利用。它可用于VB和C#


由于您希望使用静态分析信息,因此需要NuGet包(C#所需的东西位于
Microsoft.CodeAnalysis.CSharp
命名空间下)以及文档中的某个页面。

不。我认为CSharpCodeProvider无法完成上述操作。但为什么?C#编译器不使用CodeDOM吗?不,它不使用。CodeDom面向托管应用程序开发人员;csc.exe是无.NET依赖项的非托管代码。正确,它只处理IL。您可以使用NRefactory(它是C#和VB.NET的解析器,也来自#开发项目)。