Ejemplo n.º 1
0
        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);
            //}
        }
Ejemplo n.º 2
0
        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));
        }