Есть ли способ "заглушить" 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 это не сборка, а скорее пространство имен, которое находится в базовой библиотеке, поэтому простого способа полностью удалить его не существует.

Другие вопросы по тегам