Я пытаюсь запустить собственный код C# в отдельном домене приложений с ограниченными разрешениями с типом глобальных переменных, который должен быть разрешен в сценарии. Например,
public class Global {
public string Name {get; set;}
}
С моим сценарием ..
return Name;
должен вернуть значение Name.
Это легко сделать с помощью Roslyn, но оказывается, что Roslyn требует Unrestricted PermissionSet для компиляции и выполнения скриптов, поэтому я не могу просто выполнить CSharpScript.Evaluate (...)
Итак, я надеюсь скомпилировать скрипт в массив байтов, используя
CSharpCompilation.CreateScriptCompilation("foo",
syntaxTree: CSharpSyntaxTree.ParseText(script, ..),
globalsType: typeof(Global), ...)
что я успешно сделал. Я могу вызвать простой скрипт, например (return «abc»;), используя отражение, однако я застрял в том, как я могу передать экземпляр моего глобального объекта, чтобы его можно было разрешить при выполнении.
Это вообще возможно?
Я боролся с этим в течение недели, и я придумал следующее: github.com/Sodoshi/RoslynTest
Возможно компилировать в основном домене приложений, но выполнять в ограниченном домене приложений.