因此,正如标题所示,我正在尝试使用 Roslyn 从另一个程序集中声明的类型获取类型信息。最初,我尝试通过手动查看引用的程序集来做到这一点,但意识到我没有命名空间信息。
我期待以下工作:
var workSpace = Roslyn.Services.Workspace.LoadSolution(solFilePath);
IDocument file = null;
IProject proje = null;
Compilation compilation = Compilation.Create("Test");
List<CommonSyntaxTree> trees = new List<CommonSyntaxTree>();
foreach (var proj in workSpace.CurrentSolution.Projects)
{
foreach (var doc in proj.Documents)
{
if (doc.FilePath.ToLower() == filePath.ToLower())
{
file = doc;
proje = proj;
}
else trees.Add(doc.GetSyntaxTree());
}
}
var targetTree = file.GetSyntaxTree();
trees.Add(targetTree);
var compilation2 = (Compilation)compilation.AddSyntaxTrees(trees);
var semanticModel = compilation2.GetSemanticModel(targetTree);
var root = targetTree.GetRoot();
var className = root.DescendantNodes().OfType<ClassDeclarationSyntax>().ToList().ElementAt(1);
var properties = className.DescendantNodes().OfType<PropertyDeclarationSyntax>()
.Where(p => p.Modifiers.Select(syn => syn.ToString().ToLower() == "public").Count() > 0).ToList();
var typeInfo = semanticModel.GetTypeInfo(properties.First());
var property = properties.First();
var symbol = semanticModel.GetDeclaredSymbol(property);
var symbol2 = semanticModel.GetSymbolInfo(property);
Neither typeInfo
nor typeSyntax
其中有我需要的信息,我在这里做错了什么?
这是我正在解析的类:
class Foo
{
public Bar bar { get; set; }
public Foo() { }
public int GetInt(Bar bar, int ret = 5 ){
return ret;
}
}
我正在尝试获取有关的类型信息Bar
在另一个程序集中定义的类。
谢谢你的帮助。
不要打电话GetTypeInfo
。相反,一旦你拥有了PropertyDeclarationSyntax
, call GetDeclaredSymbol
使用该声明语法,您将得到IPropertySymbol
对于该财产。从那里,你可以抓住IPropertySymbol.Type
,这就是您正在寻找的类型。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)