有没有办法 "cap" RoslynPad 的 Roslyn 的 IntelliSense?
Is there a way to "cap" RoslynPad's Roslyn's IntelliSense?
我实际上正在将令人惊奇的 RoslynPad 集成到 WinForms 应用程序中并且工作得非常好。
集成的重点是允许用户输入一些 C# 代码,以便将来使用。
我对 "capping" 用户很感兴趣,因此他可以只使用一些系统甚至 LinQ 功能。 我不想让用户认为他可以使用 System.IO
和其他人。当然,我无法阻止 him/her 键入 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);
}
您可以将 RoslynHostReferences
实例传递给 RoslynHost
构造函数,并决定默认导入哪些程序集和命名空间。
您可以将 same logic 用作 Default
,只需从类型列表中删除 System.IO.Path
。
请注意,System.IO
不是程序集,而是核心库中的命名空间,因此没有简单的方法可以完全删除它。
我实际上正在将令人惊奇的 RoslynPad 集成到 WinForms 应用程序中并且工作得非常好。
集成的重点是允许用户输入一些 C# 代码,以便将来使用。
我对 "capping" 用户很感兴趣,因此他可以只使用一些系统甚至 LinQ 功能。 我不想让用户认为他可以使用 System.IO
和其他人。当然,我无法阻止 him/her 键入 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);
}
您可以将 RoslynHostReferences
实例传递给 RoslynHost
构造函数,并决定默认导入哪些程序集和命名空间。
您可以将 same logic 用作 Default
,只需从类型列表中删除 System.IO.Path
。
请注意,System.IO
不是程序集,而是核心库中的命名空间,因此没有简单的方法可以完全删除它。