有没有办法“限制” RoslynPad的Roslyn的IntelliSense?

时间:2018-06-26 11:45:45

标签: c# intellisense microsoft.codeanalysis roslynpad

我实际上是在将惊人的RoslynPad集成到WinForms应用程序中,并且工作得很好。

集成的重点是允许用户键入一些C#代码,以便将来使用。

我对“限制”用户感兴趣,因此他可以只使用某些系统甚至是LinQ功能。 我不想让用户认为他被允许使用System.IO和其他人。当然,我不能阻止他/她键入System.IO.File.Delete,但是如果System.IO的程序集未加载到RoslynPad的IntelliSense中,肯定会有所帮助。

由用户键入的源代码将在保存到数据库之前在本地进行编译。我只为编译添加了一些必要的程序集,因此,如果System.IO无法编译,则当然可以。

正如我所解释的,我只想限制Intellisense,因此他们认为他们几乎无法访问整个.NET Framework。

编辑:添加了实际完成的实际实现。我正在将“ RoslynPad.Roslyn.Windows”和“ RoslynPad.Editor.Windows”程序集加载到编辑器中。

private RoslynCodeEditor _editor;
private void InitializeEditor(string sourceCode)
{
    if (string.IsNullOrWhiteSpace(sourceCode))
        sourceCode = string.Empty;
    _editor = new RoslynCodeEditor();
    var workingDirectory = Directory.GetCurrentDirectory();
    var roslynHost = new RoslynHost(additionalAssemblies: new[]
    {
        Assembly.Load("RoslynPad.Roslyn.Windows"),
        Assembly.Load("RoslynPad.Editor.Windows")
    });

    _editor.Initialize(roslynHost, new ClassificationHighlightColors(), workingDirectory, sourceCode);
    _editor.FontFamily = new System.Windows.Media.FontFamily("Consolas");
    _editor.SyntaxHighlighting = HighlightingManager.Instance.GetDefinition("C#");
    _editor.FontSize = 12.75f;
    elementHost1.Child = _editor;
    this.Controls.Add(elementHost1);
}

1 个答案:

答案 0 :(得分:2)

您可以使用将RoslynHostReferences实例传递给RoslynHost构造函数,并确定默认情况下要导入哪些程序集和名称空间。

您可以将same logic用作Default,只需从类型列表中删除System.IO.Path

请注意,System.IO不是一个程序集,而是一个位于核心库中的名称空间,因此没有简单的方法可以完全删除它。