我通过 Richard Bayler Levaro 从NuGet下载了 C#Code Rendering with Roslyn 。
此程序包使用Visual Studio CTP6编译并运行良好。当我将对 Microsoft.CodeAnalysis 的引用升级到最新版本时,我发现以下编译无法编译,因为 MetaFileReferences 似乎已经消失了。
Richard有以下代码在Project中创建一个Referenced Assemblies集合,其中将解析源代码(我认为)。这是他的代码:
Assembly csharpDisplay = typeof(CodeWalker).Assembly; renderer.MetadataReferences.Add( new MetadataFileReference(assembly.Location)); csharpDisplay.GetReferencedAssemblies() .ToList() .ForEach(a => renderer.MetadataReferences.Add( new MetadataFileReference(Assembly.Load(a).Location)));
然后,他使用引用的程序集列表创建 CSharpCompilation ,如下所示:
Compilation compilation = CSharpCompilation.Create("CoreRenderer",
syntaxTrees: new List<SyntaxTree> { SyntaxTree },
references: MetadataReferences);
SemanticModel = compilation.GetSemanticModel(SyntaxTree);
我的研究表明,我需要修改上述内容以使用 MetadataReference.CreateFromAssembly 。但我不知道怎么做。我如何重写上面的代码?
CSharpKind属性似乎已经用于SyntaxNode!
答案 0 :(得分:1)
我联系了 Richard Bayler Levaro ,他提供了以下答案:
Assembly csharpDisplay = typeof(CodeWalker).Assembly;
renderer.MetadataReferences.Add(MetadataReference.CreateFromAssembly(assembly));
csharpDisplay.GetReferencedAssemblies()
.ToList()
.ForEach(a => renderer.MetadataReferences.Add(MetadataReference.CreateFromAssembly(Assembly.Load(a))));