Roslyn 服务为空

Roslyn service is null

我这里做错了什么?以下代码失败(取自 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);
    }
}

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

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

添加 Microsoft.CodeAnalysis.CSharp.Features NuGet 包为我解决了这个问题。