/// <summary> /// 创建程序集 /// </summary> /// <exception cref="Exception"></exception> /// <param name="messages">代码编译时的分析结果</param> public bool CreateDomain(out ImmutableArray <Diagnostic> messages) { HashSet <PortableExecutableReference> references = new HashSet <PortableExecutableReference>(); if (_state.UseAutoAssembly) { _ = AppDomain.CurrentDomain.GetAssemblies() .Where(i => !i.IsDynamic && !string.IsNullOrWhiteSpace(i.Location)) .Distinct() .Select(i => MetadataReference.CreateFromFile(i.Location)) .Execute(item => { references.Add(item); }); } _ = _state.Assemblies.Select(x => x.GetFiles()).Execute(item => { item.Execute(file => { references.Add(MetadataReference.CreateFromStream(file)); }); }); _option = _option ?? new DomainOptionBuilder(); CSharpCompilationOptions options = _option.Build(); SyntaxTree[] syntaxTrees = _state.Namespaces.Select(item => ParseToSyntaxTree(item.ToFullCode(), _option)).ToArray(); var result = BuildCompilation(_state.Path, _state.AssemblyName, syntaxTrees, references.ToArray(), options); messages = result.Diagnostics; return(result.Success); }