I am getting a referenced type from a Roslyn compilation by using Compilation.GetTypeByMetadataName(...) method. Then I use INamedTypeSymbol.GetMembers() method to get all its member symbols. I am getting all public and protected symbols but neither private nor internal. I do not care much about private member symbols, but internals are a must for me. Is there any way to get them from a Roslyn compilation?
Asked
Active
Viewed 182 times
1 Answers
1
It seems like I resolved the problem but not without a hack.
one has to set a hidden property MetadataImportOptions of the compilation to MetadataImportOptions.All (which is 2). Both the CSharpCompilationOptions.MetadataImportOptions member and MetadataImportOptions enumeration are internal to Microsort.CodeAnalysis assembly. I had to use reflection to be able to set it. In particular I did something like:
MethodInfo withMetadataImportOptionsMethodInfo =
typeof(CSharpCompilationOptions).GetMethod("WithMetadataImportOptions, BindingFlags.NonPublic | BindingFlags.Instance);
MyCompilationOptions =
(CSharpCompilationOptions) withMetadataImportOptionsMethodInfo.Invoke(MyCompilationOptions, (byte) 2);
(byte) 2 is the MetadataImportOptions.All option.

Nick Polyak
- 201
- 1
- 9