【问题标题】:Is there a way to "cap" RoslynPad's Roslyn's IntelliSense?有没有办法“封顶” RoslynPad 的 Roslyn 的 IntelliSense?
【发布时间】:2018-12-05 03:08:21
【问题描述】:

我实际上正在将惊人的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);
}

【问题讨论】:

  • 我只是快速浏览了源代码中包含的示例编辑器,看起来该列表可能来自使用.WithReferences() 或添加的引用程序集RoslynHost .DefaultReferences。您不能添加System.IO,以及您不希望用户拥有的其他程序集..
  • @BradleyUffner 感谢您的评论,但看起来.DefaultReferences 是只读的,正如您在我对问题所做的编辑中看到的那样,我只是添加了“附加程序集”。我没有找到任何方法来指定哪些应该“只是”添加。

标签: c# intellisense microsoft.codeanalysis roslynpad


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多