private static IReadOnlyList <MetadataReference> GetMetadataReferences(DataBuilderOptions options, Type accessorType) { var references = new List <AssemblyDescriptor>(options?.MigrationAssemblyReferences.Distinct()); // Add DbContextAccessor AssemblyReference var accessorReference = AssemblyDescriptor.Create(accessorType?.Assembly); if (!references.Contains(accessorReference)) { references.Add(accessorReference); } references.Sort(); return(references.Select(refer => refer.ToMetadataReference()).AsReadOnlyList()); //var metadatas = new List<MetadataReference>(); //foreach (var reference in references) //{ // if (reference.CopyLocal) // { // if (reference.Location.IsEmpty()) // throw new InvalidOperationException(InternalResource.InvalidOperationExceptionNotFindPathForAssemblyReferenceFormat.Format(reference.ToString())); // File.Copy(reference.Location, Path.Combine(assemblyPath.BasePath, Path.GetFileName(reference.Location)), overwrite: true); // } // metadatas.AddRange(reference.Metadatas); //} }
public static FilePathCombiner CompileInFile(DbContextAccessorBase accessor, IModel model, DataBuilderOptions options, FilePathCombiner filePath) { accessor.NotNull(nameof(accessor)); model.NotNull(nameof(model)); var accessorType = accessor.GetType(); var typeName = GenerateTypeName(accessorType); var generator = accessor.GetService <IMigrationsCodeGenerator>(); var sourceCode = generator.GenerateSnapshot(typeName.Namespace, accessorType, typeName.Name, model); var references = GetMetadataReferences(options, accessorType); return(CSharpCompiler.CompileInFile(filePath, references, sourceCode)); }