2017-02-26 5 views
0

私はここで間違っていますか?次のコードは失敗します(これはRoslynのソースウェブサイトから取ったものです)Roslynサービスがnullです

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); 
関連する問題