我通过使用Compilation.GetTypeByMetadataName(...)方法从Roslyn编译中获取引用类型。然后我使用INamedTypeSymbol.GetMembers()方法获取其所有成员符号。我得到所有公共和受保护的符号,但既不是私人也不是内部。我不太关心私人会员符号,但内部对我来说是必须的。有没有办法从Roslyn汇编中获取它们?
答案 0 :(得分:1)
似乎我解决了这个问题,但并非没有黑客攻击。
必须将编译的隐藏属性MetadataImportOptions设置为MetadataImportOptions.All(即2)。 CSharpCompilationOptions.MetadataImportOptions成员和MetadataImportOptions枚举都是Microsort.CodeAnalysis程序集的内部。我不得不使用反射来设置它。特别是我 做了类似的事情:
MethodInfo withMetadataImportOptionsMethodInfo =
typeof(CSharpCompilationOptions).GetMethod("WithMetadataImportOptions, BindingFlags.NonPublic | BindingFlags.Instance);
MyCompilationOptions =
(CSharpCompilationOptions) withMetadataImportOptionsMethodInfo.Invoke(MyCompilationOptions, (byte) 2);
(byte)2是MetadataImportOptions.All选项。