如何使用MetadataReference.CreateFromAssembly而不是MetadataFileReference

时间:2015-05-06 16:53:12

标签: c# .net

我通过 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!

1 个答案:

答案 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))));