- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我很确定我遗漏了一些明显的东西,但即使阅读了官方文档,我也不清楚 Roslyn 如何创建语法树。
考虑以下简单代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace aopsample
{
class UsbReadWriter
{
public bool ReadFromUsb()
{
return true;
}
public virtual bool WriteToUsb()
{
return true;
}
}
}
我得到了这段代码的 SyntaxTree
并做了类似这样的东西,非常粗糙和简单,但我只需要理解。
string[]lines = System.IO.File.ReadAllLines(filename);
string tocompile = string.Join(string.Empty, lines);
SyntaxNode root = tree.GetRoot(new CancellationToken());
foreach (SyntaxNode sn in root.ChildNodes())
{
if (sn.Kind == SyntaxKind.NamespaceDeclaration)
{
//I get a namespace, so it's Child node just will be class
foreach (SyntaxNode sname in sn.ChildNodes())
{
if (sname.Kind == SyntaxKind.ClassDeclaration)
{
//I get class, so it's Children will be methods of the class
foreach (SyntaxNode sclass in sname.ChildNodes()) // **{1}**
{
if (sclass.Kind == SyntaxKind.MethodDeclaration)
{
}
}
}
}
而且效果很好。
但是,向 ReadFromUsb()
方法添加注释就足够了,就像这样
/// <summary>
/// Reads a data from Usb
/// </summary>
/// <returns></returns>
public bool ReadFromUsb()
{
return true;
}
ChildNodes()
调用 {1} 标记行,对于 CLASS (???) 返回 0。
为什么要在成员函数中添加注释,重置父 CLASS 子句语法节点的集合?
我错过了什么?
最佳答案
经过聊天讨论,我们确定问题出在要解析的代码是用以下代码构建的:
string[]lines = System.IO.File.ReadAllLines(filename);
string tocompile = string.Join(string.Empty, lines);
这会将所有代码放在一行中。因此 //
之后的所有内容都变成了注释。解决办法就是使用 Environment.NewLine
作为连接字符,或者使用 ReadAllText
而不是 ReadAllLines
。
关于c# - Roslyn 质疑 SyntaxTree 的构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8682245/
我正在 Unity 2019.2.3f1 中开发。我正在尝试编写一个可以 Customize project files created by VSTU 的脚本.如果链接被删除,我已经包含了一个与链接
我正在尝试在解决方案中查找某个类型的所有引用。我的起点是文件内的一个跨度(当前光标位置),例如 110:116。查看 Roslyn 附带的示例,我发现我需要 SymbolFinder.FindRefe
我想一次对 Roslyn 语法树进行多项修改,都围绕同一代码区域 tree = tree.ReplaceNodes(oldNode, newNode).RemoveNode(toRemove); 但是
免责声明 我很确定我遗漏了一些明显的东西,但即使阅读了官方文档,我也不清楚 Roslyn 如何创建语法树。 例子 考虑以下简单代码: using System; using System.Collec
有没有一种简单的方法可以到达定义了特定 TypeSyntax 的文档的 SyntaxTree? 每当 TypeSyntax 为 IdentifierNameSyntax 时,我都可以获得 Identi
我想在给定位置(lineNumber)的情况下获取一行的 SyntaxNode。下面的代码应该是不言自明的,但如有任何问题,请告诉我。 static void Main() {
我写了我的类 MonitorSyntaxRewriter,它继承自 CSharpSyntaxRewriter。通过这个类(class),我改变了我的 SyntaxTree。但是,我怎样才能将这个修改过
我正在寻找将 C# 转换为 XML 并再次反序列化回 C# 的选项。任何人都知道任何现有的解决方案吗?我假设 Roslyn SyntaxTree 不是 Xml 可序列化的。我还假设为语法树制作一个 x
我正在使用 Roslyn 更改代码,但是,在更改后生成了一个新的 SyntaxNode,但我无法找到执行此新代码的方法。我发现的唯一方法是从新的 Root 获取 ToString 并使用新字符串调用
我正在尝试替换 Roslyn 语法树中的节点,这只是为了工作,但有一种烦恼,感觉它不应该是一个问题。 语法树是从脚本生成的,我希望结果也是基于脚本的语法树——但出于某种原因,替换树中的一个节点会创建一
我已经使用 Install-Package Microsoft.CodeAnalysis -Pre 为 Roslyn 安装了 nuget,但我仍然无法获取方法 SyntaxTree.ParseFile
我是一名优秀的程序员,十分优秀!