当您将鼠标悬停在“简化”上时using
VS2015 中的指令,它会显示完全限定名称。我如何通过 Roslyn 插件获取此信息?是否会使用一个DiagnosticAnalyzer
? A CodeFixProvider
?
浏览 source.roslyn.codeplex.com,那里有大量信息,包括如何add a using陈述,以及如何简化类型名称(包括using
声明),但我无法弄清楚如何反向获取完全限定的名称。
通过语义模型,您可以检索有关构成代码的语义的信息(显然)——这允许您获取有关类型和其他构造的特定信息。
例如:
void Main()
{
var tree = CSharpSyntaxTree.ParseText(@"
using X = System.Text;
using Y = System;
using System.IO;
namespace ConsoleApplication1
{
}"
);
var mscorlib = PortableExecutableReference.CreateFromFile(typeof(object).Assembly.Location);
var compilation = CSharpCompilation.Create("MyCompilation", syntaxTrees: new[] { tree }, references: new[] { mscorlib });
var semanticModel = compilation.GetSemanticModel(tree);
var root = tree.GetRoot();
// Get usings
foreach (var usingDirective in root.DescendantNodes().OfType<UsingDirectiveSyntax>())
{
var symbol = semanticModel.GetSymbolInfo(usingDirective.Name).Symbol;
var name = symbol.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat);
name.Dump();
}
}
Output:
全局::系统.文本
全局::系统
全局::系统.IO
如果你使用SymbolDisplayFormat.CSharpErrorMessageFormat
相反,您将收到
系统.文本
系统
系统IO
您可以选择您感兴趣的内容,但正如您所看到的,无论有没有别名,它都可以正常工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)