【问题标题】:Cannot effectively add class to namespace in Roslyn无法有效地将类添加到 Roslyn 中的命名空间
【发布时间】:2017-04-04 21:50:41
【问题描述】:

我正在使用 Roslyn 2.0 和 SyntaxFactory 生成 SyntaxTree

var namespaceNode = SyntaxFactory.NamespaceDeclaration(
    SyntaxFactory.ParseName("Root.MyNamespace1"));
var classNode = SyntaxFactory.ClassDeclaration("MyClass");

namespaceNode.AddMembers(classNode);

缺少成员

似乎一切正常,但是当我通过调用namespaceNode.ToString() 在调试器对象namespaceNode 中进行检查时,我得到:

namespaceRoot.MyNamespace1{}

每次我在SyntaxNode 上使用ToString 时,它通常都会发出打印的代码,所以我很确定这里的问题是命名空间是空的。即使我打电话给AddMembers,课程也不在那里。

命名空间中没有成员!我做错了什么?

【问题讨论】:

    标签: c# .net roslyn roslyn-code-analysis


    【解决方案1】:

    当我写这个时:

    namespaceNode.AddMembers(classNode);
    

    我在 Visual Studio 2017 社区中收到一条警告,解释了正在发生的事情:

    RS1014 'NamespaceDeclarationSyntax' 是不可变的,'AddMembers' 不会对其产生任何影响。考虑使用“AddMembers”的返回值。

    所以你必须

    namespaceNode = namespaceNode.AddMembers(classNode);
    

    【讨论】:

    • 哦,该死的,这很有意义......当然它是不可变的,谢谢!我觉得自己好傻
    • 我没有收到那个警告。您是否安装了一些分析器或扩展程序来生成它?
    • @svick 我在 VS 2017 中创建了一个新的 C# 项目,并添加了 Microsoft.CodeAnalysis.CSharp.Analyzers 分析器 (this nuget)
    • @xanatos 我相信我已经找到了分析器警告没有出现在我和reported it 的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-10
    • 1970-01-01
    • 2021-05-30
    • 1970-01-01
    • 2012-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多