c# - Roslyn 上的 GetCompletionsAsync 出现 NullReferenceException

标签 c# roslyn code-completion roslyn-code-analysis

我尝试获取代码完成,但是当我尝试通过 CompletionService 获取异步完成时,我得到 NullReferenceException

这是一段代码:

public async Task<IList<ICompletionData>> GetCompletionData(String code, int offset)
    {
        IList<ICompletionData> completionData = null;

        if (_workspace != null)
        {
            _workspace.Dispose();
        }
        _workspace = new AdhocWorkspace();
        _project = _workspace.AddProject("Test", LanguageNames.CSharp);



        var sourceText = SourceText.From(code);
        var document = _workspace.AddDocument(_project.Id, "Compilation0", sourceText); 
        var completionService = CompletionService.GetService(document);
        var charCompletion = GetCompletionTrigger('.');
        var data = await completionService.GetCompletionsAsync(_document, offset,charCompletion,).ConfigureAwait(false);

        if (data == null || data.Items.Any() == false)
            return new List<ICompletionData>();

        completionData = data.Items.Select(item => new RoslynCodeCompletion(_document, item)).ToList<ICompletionData>();

        return completionData;
    }

行错误:

var data = await completionService.GetCompletionsAsync(_document, offset,charCompletion,).ConfigureAwait(false);//NullReferenseException.

脚本代码代码删除由“.”触发(点)符号:

var str="";
str. // here calls `GetCompletionData`

完整的代码片段位于 pastebin

最佳答案

Roslyn PR #14921之后这变得容易多了被合并了。之前你必须有很多manual MEF configuration ,但现在安装以下 nuget 软件包就足够了:

  • 微软代码分析
  • Microsoft.CodeAnalysis.CSharp
  • Microsoft.CodeAnalysis.Features
  • Microsoft.CodeAnalysis.CSharp.Features

Roslyn 将执行所需的配置。

关于c# - Roslyn 上的 GetCompletionsAsync 出现 NullReferenceException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40100985/

相关文章:

c# - asp.net mvc 文件内容类型

c# - 我应该如何处理引用实体的持久性?

resharper - 选项卡行为 Resharper Intellisense 选项

c# - 如何防止我的 HTTP 服务器出现 "sleeping"?

c# - .jar 到 .cs 类/文件转换技术或实用程序?

c# - 返回否定 bool 时的 "Cast is redundant"警告

c# - 在 roslyn 中对解决方案应用多项更改

c# - 转向资源重构

python-3.x - IPython 自定义完成器的扩展信息

xcode - 有没有办法禁用或修改 Xcode 的代码完成?