public void CanCompileMultipleClassesIntoAssembly() { string propName = "Id"; string assemblyName = Path.Combine(this.csFilePath, "AssemblyCoordinatorTests.dll"); string secondaryClassName = "DifferentTestClass"; CodeDomAssemblyCoordinator coordinator = new CodeDomAssemblyCoordinator(this.csFilePath, "AssemblyCoordinatorTests"); CodeDomClassModel model = coordinator.CreateClassModel(this.className); model.AddProperty(propName, typeof(int)); coordinator.StageModelForCompilation(model); CodeDomClassModel model2 = coordinator.CreateClassModel(secondaryClassName); model2.AddProperty("StringProperty", typeof(string)); coordinator.StageModelForCompilation(model2); coordinator.CompileCSharpCode(); Assert.IsTrue(File.Exists(Path.Combine(this.csFilePath, $"{this.className}.cs"))); Assert.IsTrue(File.Exists(Path.Combine(this.csFilePath, $"{secondaryClassName}.cs"))); Assert.IsTrue(File.Exists(assemblyName)); Assembly generatedAssembly = Assembly.LoadFile(assemblyName); Type generatedType = generatedAssembly.GetType($"{namesp.Name}.{className}"); object generatedObject = Activator.CreateInstance(generatedType); Assert.IsNotNull(generatedObject); Type generatedType2 = generatedAssembly.GetType($"{namesp.Name}.{secondaryClassName}"); object generatedObject2 = Activator.CreateInstance(generatedType2); Assert.IsNotNull(generatedObject2); }
public void CanAddPropertyToGeneratedModel() { string propName = "Id"; CodeDomClassModel generator = new CodeDomClassModel(this.csFilePath, className); generator.AddProperty(propName, typeof(int)); generator.CompileClassFromGeneratedCsFile(this.namesp); string assemblyName = Path.Combine(this.csFilePath, $"{this.namesp.Name}.dll"); Assembly generatedAssembly = Assembly.LoadFile(assemblyName); Type generatedType = generatedAssembly.GetType($"{namesp.Name}.{className}"); var accessor = TypeAccessor.Create(generatedType); object generatedObject = Activator.CreateInstance(generatedType); accessor[generatedObject, propName] = 9999; object result = accessor[generatedObject, propName]; Assert.AreEqual(9999, (int)result); }
public void ClassCanBeCompiledFromCoordinator() { string propName = "Id"; string assemblyName = Path.Combine(this.csFilePath, "AssemblyCoordinatorTests.dll"); CodeDomAssemblyCoordinator coordinator = new CodeDomAssemblyCoordinator(this.csFilePath, "AssemblyCoordinatorTests"); CodeDomClassModel model = coordinator.CreateClassModel(this.className); model.AddProperty(propName, typeof(int)); coordinator.StageModelForCompilation(model); coordinator.AddNamespaceImport(NamespaceReference.SystemXml); coordinator.CompileCSharpCode(); Assert.IsTrue(File.Exists(Path.Combine(this.csFilePath, $"{this.className}.cs"))); Assert.IsTrue(File.Exists(assemblyName)); Assembly generatedAssembly = Assembly.LoadFile(assemblyName); Type generatedType = generatedAssembly.GetType($"{namesp.Name}.{className}"); object generatedObject = Activator.CreateInstance(generatedType); Assert.IsNotNull(generatedObject); }