/// <summary> /// 生成访问器(持久化)键名(借助访问器文件路径组合器支持访问器、设计时、连接字符串、租户隔离)。 /// </summary> /// <param name="invokeTypeName">给定的调用类型名称。</param> /// <param name="accessorFilePath">给定的访问器(持久化)文件路径组合器。</param> /// <returns>返回字符串。</returns> public static string GenerateAccessorKey(string invokeTypeName, FilePathCombiner accessorFilePath) { invokeTypeName.NotNull(nameof(invokeTypeName)); accessorFilePath.NotNull(nameof(accessorFilePath)); var sb = new StringBuilder(); sb.Append(invokeTypeName); sb.Append(';'); // 访问器文件路径组合器已作有效隔离 sb.Append(accessorFilePath); return(sb.ToString()); }
public static FilePathCombiner CompileInFile(FilePathCombiner assemblyPath, IEnumerable <MetadataReference> references, params string[] sourceCodes) { assemblyPath.NotNull(nameof(assemblyPath)); var syntaxTrees = sourceCodes.Select(s => SyntaxFactory.ParseSyntaxTree(s)); var compileOptions = new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary); var compilation = CSharpCompilation.Create(assemblyPath.FileName, syntaxTrees, references, compileOptions); using (var stream = File.OpenWrite(assemblyPath)) { var result = compilation.Emit(stream); if (!result.Success) { throw new InvalidOperationException($"Build failed. Diagnostics: {string.Join(Environment.NewLine, result.Diagnostics)}"); } } return(assemblyPath); }