2017-02-26 38 views
0

我在这里做错了什么?以下代码失败(并且取自Roslyn的源网站)Roslyn服务为空

public class CompletionServiceTests 
{ 
    public void AcquireCompletionService() 
    { 
     var workspace = new AdhocWorkspace(); 

     var document = workspace 
      .AddProject("TestProject", LanguageNames.CSharp) 
      .AddDocument("TestDocument.cs", ""); 

     var service = CompletionService.GetService(document); 
     Assert.NotNull(service); 
    } 
} 
+0

什么是失败的? – Sajeetharan

+1

“代码失败”是什么意思? – Venky

+0

'Assert.NotNull'抛出。但是,我发现问题,我需要将CSharpFeature程序集加载到MEF主机中。 –

回答

3

我发现了这个问题。我需要这样做:

 var assemblies = new[] 
     { 
      Assembly.Load("Microsoft.CodeAnalysis"), 
      Assembly.Load("Microsoft.CodeAnalysis.CSharp"), 
      Assembly.Load("Microsoft.CodeAnalysis.Features"), 
      Assembly.Load("Microsoft.CodeAnalysis.CSharp.Features"), 
     }; 

     var partTypes = MefHostServices.DefaultAssemblies.Concat(assemblies) 
       .Distinct() 
       .SelectMany(x => x.GetTypes()) 
       .ToArray(); 

     var compositionContext = new ContainerConfiguration() 
      .WithParts(partTypes) 
      .CreateContainer(); 

     var host = MefHostServices.Create(compositionContext); 

     var workspace = new AdhocWorkspace(host); 

     var document = workspace 
      .AddProject("TestProject", LanguageNames.CSharp) 
      .AddDocument("TestDocument.cs", ""); 

     var service = CompletionService.GetService(document);