Есть ли способ "заглушить" IntelliSense RoslynPad от RoslynPad?
Я на самом деле интегрирую замечательный RoslynPad в приложение WinForms и чертовски хорошо работаю.
Смысл интеграции заключается в том, что пользователь может ввести некоторый код C#, чтобы его можно было использовать в будущем.
Дело в том, что я заинтересован в "закрытии" пользователя, чтобы он мог просто использовать некоторые функции System или даже LinQ. Я не хочу, чтобы пользователь думал, что ему разрешено использовать System.IO
и другие Конечно, я не могу предотвратить его / ее печатать System.IO.File.Delete
, но, безусловно, поможет, если System.IO
Ассамблея не загружается в IntelliSense RoslynPad.
Исходный код, набранный пользователем, будет скомпилирован локально перед сохранением в БД. Я добавляю только несколько необходимых сборок для компиляции, так что если 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 ответ
Вы можете использовать пройти RoslynHostReferences
экземпляр к RoslynHost
конструктор и решить, какие сборки и пространства имен импортируются по умолчанию.
Вы можете использовать ту же логику, что и Default
просто удали System.IO.Path
из списка типов.
Обратите внимание, что System.IO
это не сборка, а скорее пространство имен, которое находится в базовой библиотеке, поэтому простого способа полностью удалить его не существует.