2017-02-26 33 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);