using System.Collections.Immutable; using System.Reflection; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp; using RoslynPad.Roslyn; namespace Szmedi.AIScriptRunner.RvScript { public class RevitRoslynHost : RoslynHost { public RevitRoslynHost(IEnumerable additionalAssemblies = null, RoslynHostReferences references = null, ImmutableArray? disabledDiagnostics = null) : base(additionalAssemblies, references, disabledDiagnostics) { } protected override Project CreateProject(Solution solution, DocumentCreationArgs args, CompilationOptions compilationOptions, Project? previousProject = null) { var name = args.Name ?? "Program"; var id = ProjectId.CreateNewId(name); var parseOptions = new CSharpParseOptions(kind: SourceCodeKind.Script, languageVersion: LanguageVersion.Default); compilationOptions = compilationOptions.WithScriptClassName(name); solution = solution.AddProject(ProjectInfo.Create( id, VersionStamp.Create(), name, name, LanguageNames.CSharp, isSubmission: true, parseOptions: parseOptions, hostObjectType: typeof(ScriptGlobals), compilationOptions: compilationOptions, metadataReferences: previousProject != null ? ImmutableArray.Empty : DefaultReferences, projectReferences: previousProject != null ? new[] { new ProjectReference(previousProject.Id) } : null)); var project = solution.GetProject(id); return project; } } }