예제 #1
0
        public void ShouldBeAbleToGetGeneratedDtoAssembly()
        {
            string curDir = Environment.CurrentDirectory;
            string newDir = Path.Combine(curDir, string.Format("{0}_{1}"._Format(MethodBase.GetCurrentMethod().Name, 4.RandomLetters())));

            if (!Directory.Exists(newDir))
            {
                Directory.CreateDirectory(newDir);
            }
            Environment.CurrentDirectory = newDir;
            Assembly assembly     = typeof(MainObject).Assembly;
            string   pocoAssembly = Dto.GetDefaultFileName(assembly);

            if (File.Exists(pocoAssembly))
            {
                File.Delete(pocoAssembly);
            }

            // Do it thrice to ensure testing of multiple execution paths within implementation
            GeneratedAssemblyInfo assemblyInfo = Dto.GetGeneratedDtoAssemblyInfo(typeof(MainObject).Assembly);

            assemblyInfo = Dto.GetGeneratedDtoAssemblyInfo(typeof(MainObject).Assembly);
            assemblyInfo = Dto.GetGeneratedDtoAssemblyInfo(typeof(MainObject).Assembly);

            Environment.CurrentDirectory = curDir;
        }
예제 #2
0
        public GeneratedAssemblyInfo GetAssemblyInfo()
        {
            FileName = "{0}Dao"._Format(Schema.Name);
            string fileName = Path.GetFileNameWithoutExtension(FileName);

            FilePath = Path.Combine(Workspace, "{0}.dll");
            return(GeneratedAssemblyInfo.GetGeneratedAssembly(FilePath, this));
        }
예제 #3
0
        public GeneratedAssemblyInfo GenerateAssembly()
        {
            string sourcePath = Path.Combine(Workspace, "src");

            GenerateSource(sourcePath);
            GeneratedAssemblyInfo result = Compile(sourcePath);

            return(result);
        }
예제 #4
0
 public void Dispose()
 {
     if (TargetAssemblyInfo != null)
     {
         TargetAssemblyInfo.AssemblyRawData = null;
         TargetAssemblyInfo.AssemblyTypes   = null;
         TargetAssemblyInfo.TargetAssembly  = null;
         TargetAssemblyInfo = null;
     }
 }
예제 #5
0
        public static GeneratedAssemblyInfo LoadPocoLibrary(byte[] classLibData)
        {
            GeneratedAssemblyInfo aInfo = new GeneratedAssemblyInfo();

            aInfo.AssemblyRawData = classLibData;
            aInfo.TargetAssembly  = Assembly.Load(aInfo.AssemblyRawData);
            aInfo.AssemblyTypes   = LoadPocoLibrary(aInfo.TargetAssembly);

            return(aInfo);
        }
예제 #6
0
파일: Dto.cs 프로젝트: dekkerb115/Bam.Net
 /// <summary>
 /// Generates an assembly containing Dto's that represent all the
 /// Dao's found in the sepecified daoAssembly.  A Dto or (DTO) is
 /// a Data Transfer Object and represents only the properties of
 /// a Dao.  A Dao or (DAO) is a Data Access Object that represents
 /// both properties and methods to create, retrieve, update and delete.
 /// </summary>
 /// <param name="daoAssembly"></param>
 /// <returns></returns>
 public static GeneratedAssemblyInfo GetGeneratedDtoAssemblyInfo(Assembly daoAssembly, string fileName = null)
 {
     lock (_genLock)
     {
         DaoToDtoGenerator generator;
         string            defaultFileName = GetDefaultFileName(daoAssembly, out generator);
         fileName = fileName ?? defaultFileName;
         GeneratedAssemblyInfo assemblyInfo = GeneratedAssemblyInfo.GetGeneratedAssembly(fileName, generator);
         return(assemblyInfo);
     }
 }
예제 #7
0
        public GeneratedAssemblyInfo GenerateAssembly()
        {
            CompilerResults results;
            string          fileName = $"{WrapperNamespace}.Wrapper.dll";

            new DirectoryInfo(WriteSourceTo).ToAssembly(fileName, out results);
            GeneratedAssemblyInfo result = new GeneratedAssemblyInfo(fileName, results);

            result.Save();
            return(result);
        }
예제 #8
0
        private void GenerateAssembly(DaoAssemblyGenerator generator, DirectoryInfo srcDir, out string dest)
        {
            GeneratedAssemblyInfo assembly = generator.Compile(srcDir.FullName, "{0}.dll"._Format(Namespace));
            FileInfo assemblyFile          = assembly.GetAssembly().GetFileInfo();

            dest = Path.Combine(this.WorkspaceFolder, "bin", assemblyFile.Name);
            DirectoryInfo destDir = new DirectoryInfo(Path.Combine(this.WorkspaceFolder, "bin"));

            if (!destDir.Exists)
            {
                Directory.CreateDirectory(destDir.FullName);
            }
            assemblyFile.CopyTo(dest);
        }
예제 #9
0
        public GeneratedAssemblyInfo GenerateDtoAssembly(string nameSpace, string fileName)
        {
            Type          oneDao        = DaoAssembly.GetTypes().FirstOrDefault(t => t.HasCustomAttributeOfType <TableAttribute>());
            string        writeSourceTo = Path.Combine(RuntimeSettings.AppDataFolder, "DtoTemp_{0}"._Format(Dao.ConnectionName(oneDao)));
            DirectoryInfo sourceDir     = SetSourceDir(writeSourceTo);

            WriteDtoSource(nameSpace, writeSourceTo);

            sourceDir.ToAssembly(fileName, out CompilerResults results);
            GeneratedAssemblyInfo result = new GeneratedAssemblyInfo(fileName, results);

            result.Save();
            return(result);
        }
예제 #10
0
        public GeneratedAssemblyInfo Compile(string sourcePath, string fileName = null)
        {
            fileName = fileName ?? FileName;
            CompilerResults compileResult = AdHocCSharpCompiler.CompileDirectory(new DirectoryInfo(sourcePath), fileName, ReferenceAssemblyPaths, false);

            if (compileResult.Errors.Count > 0)
            {
                throw new CompilationException(compileResult);
            }

            GeneratedAssemblyInfo result = new GeneratedAssemblyInfo(FilePath, compileResult);

            result.Save();
            return(result);
        }
        public GeneratedAssemblyInfo GenerateAssembly()
        {
            Args.ThrowIfNullOrEmpty(AssemblyName, nameof(AssemblyName));

            GeneratedAssemblyInfo result = null;
            AutoResetEvent        wait   = new AutoResetEvent(false);

            GenerateCsFiles(Types, (o, a) =>
            {
                CompilerResults compilerResults = AdHocCSharpCompiler.CompileDirectory(new DirectoryInfo(CsFileDirectory), AssemblyName, new Assembly[] { typeof(IMessage).Assembly });
                result = new GeneratedAssemblyInfo(AssemblyName, compilerResults);
                wait.Set();
            });
            wait.WaitOne();
            return(result);
        }
예제 #12
0
        public GeneratedAssemblyInfo GenerateAssembly()
        {
            OnAssemblyGenerating(new ProxyAssemblyGenerationEventArgs {
                ServiceType = ServiceType, ServiceSettings = ServiceSettings
            });

            ProxyModel proxyModel = RenderCode();

            CompilerResults compileResult = AdHocCSharpCompiler.CompileSource(Code.ToString(), FileName, proxyModel.ReferenceAssemblies);

            if (compileResult.Errors.Count > 0)
            {
                throw new CompilationException(compileResult);
            }

            GeneratedAssemblyInfo result = new GeneratedAssemblyInfo(FileName, compileResult);

            result.Save();
            OnAssemblyGenerated(new ProxyAssemblyGenerationEventArgs {
                ServiceType = ServiceType, ServiceSettings = ServiceSettings
            });
            return(result);
        }
        public GeneratedAssemblyInfo GenerateAssembly()
        {
            if (_generatedAssemblyInfos.ContainsKey(ServiceType))
            {
                return(_generatedAssemblyInfos[ServiceType]);
            }
            ProxyAssemblyGeneratorService genSvc = ProxyAssemblyGeneratorService.Default;
            ServiceResponse response             = genSvc.GetBase64ProxyAssembly(ServiceType.Namespace, ServiceType.Name);

            if (!response.Success)
            {
                throw new ApplicationException(response.Message);
            }
            // write bytes to temp
            byte[] assembly = response.Data.ToString().FromBase64();
            string path     = Path.Combine(SystemPaths.Current.Generated, $"{ServiceType.Name}_{ServiceSettings.Protocol}_{ServiceSettings.Host}_{ServiceSettings.Port}_proxy.dll");

            File.WriteAllBytes(path, assembly);
            // load the assembly from the file
            GeneratedAssemblyInfo info = new GeneratedAssemblyInfo(Assembly.LoadFile(path));

            _generatedAssemblyInfos[ServiceType] = info;
            return(info);
        }
예제 #14
0
 public void Init(GeneratedAssemblyInfo targetAssemblyInfo)
 {
     TargetAssemblyInfo = targetAssemblyInfo;
 }
예제 #15
0
 public GeneratedAssemblyInfo GetAssembly()
 {
     return(GeneratedAssemblyInfo.GetGeneratedAssembly(FileName, this));
 }
예제 #16
0
 public Assembly GetGeneratedAssembly()
 {
     return(GeneratedAssemblyInfo.GetGeneratedAssembly(InfoFileName, this).Assembly);
 }
 public GenerateDaoAssemblyEventArgs(GeneratedAssemblyInfo generatedAssemblyInfo)
 {
     this.GeneratedAssemblyInfo = generatedAssemblyInfo;
 }
 public Assembly GetAssembly()
 {
     return(GeneratedAssemblyInfo.GetGeneratedAssembly(AssemblyName, this));
 }
예제 #19
0
파일: Dto.cs 프로젝트: dekkerb115/Bam.Net
        /// <summary>
        /// Get the associated Dto types for the
        /// Dao types in the specified daoAssembly.
        /// </summary>
        /// <param name="daoAssembly"></param>
        /// <returns></returns>
        public static Type[] GetTypesFromDaos(Assembly daoAssembly)
        {
            GeneratedAssemblyInfo assemblyInfo = GetGeneratedDtoAssemblyInfo(daoAssembly);

            return(assemblyInfo.GetAssembly().GetTypes());
        }