Есть ли способ «заглушить» IntelliSense RoslynPad от RoslynPad? - PullRequest
0 голосов
/ 26 июня 2018

Я на самом деле интегрирую 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 Ответ

0 голосов
/ 27 июня 2018

Можно передать экземпляр RoslynHostReferences в конструктор RoslynHost и решить, какие сборки и пространства имен импортируются по умолчанию.

Вы можете использовать ту же логику , что и Default, просто удалите System.IO.Path из списка типов.

Обратите внимание, что System.IO - это не сборка, а пространство имен, которое находится в базовой библиотеке, поэтому простого способа полностью удалить его не существует.

...