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