Итак, у меня есть класс компилятора, который я использую для запуска пользовательского кода. Теперь моя проблема в том, что мои документы являются документами сценариев, и я не знаю, как установить базовый класс для этих документов. я искал hostObjectType, но я увидел, что isSubmission должен быть истинным, но я не могу этого сделать, потому что остальная часть моего кода сломается.
Код для инициализации компилятора:
public static async Task Init(Type host, params Assembly[] assemblies)
{
await Task.Run(() =>
{
IsInitialized = true;
workspace = new AdhocWorkspace();
var compilationOptions = new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary, allowUnsafe: true, usings: new string[] { "CCreative" }, platform: Platform.X64)
.WithMetadataImportOptions(MetadataImportOptions.All);
var scriptProjectInfo = ProjectInfo.Create(ProjectId.CreateNewId(), VersionStamp.Create(), "Script", "Script", LanguageNames.CSharp, isSubmission: false, hostObjectType: host)
.WithMetadataReferences(assemblies.Select(x => MetadataReference.CreateFromFile(x.Location, default, x.Location.Contains("CCreative") ? new CCreativeDocumentationProvider() : null)))
.WithCompilationOptions(compilationOptions);
project = workspace.AddProject(scriptProjectInfo);
workspace.TryApplyChanges(project.Solution.WithOptions(GetOptions(workspace)));
});
}
поэтому моя цель - установить для базового класса всех документов сценариев параметр host.
Код для создания документа:
public static DocumentId AddDocument(string text)
{
var scriptDocumentInfo = DocumentInfo.Create(DocumentId.CreateNewId(project.Id),
"Script",
sourceCodeKind: SourceCodeKind.Script,
loader: TextLoader.From(TextAndVersion.Create(SourceText.From(text), VersionStamp.Create())));
var scriptDocument = workspace.AddDocument(scriptDocumentInfo);
project = scriptDocument.Project;
workspace.TryApplyChanges(project.Solution);
return scriptDocument.Id;
}
Любая помощь будет приветствоваться:)