public async Task <int> AddTestAssemblyAsync(byte[] rawAssembly) { if (rawAssembly == null) { throw new ArgumentNullException(nameof(rawAssembly)); } var assembly = Assembly.Load(rawAssembly); var moduleVersionId = assembly.ManifestModule.ModuleVersionId; if (!CheckMetaData(moduleVersionId)) { int length = assembly.FullName.IndexOf(",", StringComparison.Ordinal); string assemblyName = assembly.FullName.Substring(0, length) + ".dll"; var testAssemblyInfo = new AssessmentSystem.Data.Access.ExerciseExecutor.TestAssemblyInfo { Data = rawAssembly, AssemblyName = assemblyName, IsSoftDeleted = false, ModuleVersionId = moduleVersionId }; _context.TestAssemblyInfo.Add(testAssemblyInfo); var testClasses = assembly.TypesWith(typeof(TestFixtureAttribute)); foreach (var testClass in testClasses) { var testClassInfo = new AssessmentSystem.Data.Access.ExerciseExecutor.TestClassInfo { Name = testClass.FullName, AssemblyInfo = testAssemblyInfo }; var methods = testClass.MethodsWith(Flags.InstancePublic, typeof(TestAttribute)); foreach (var method in methods) { var testMethodsInfo = new AssessmentSystem.Data.Access.ExerciseExecutor.TestMethodInfo { Name = method.Name, ClassInfo = testClassInfo }; testClassInfo.TestMethods.Add(testMethodsInfo); } _context.TestClassInfo.Add(testClassInfo); } await _context.SaveChangesAsync(); return(testAssemblyInfo.Id); } throw new AssemblyAlreadyExistsException(); }
private void SoftDeleteAssembly( AssessmentSystem.Data.Access.ExerciseExecutor.TestAssemblyInfo assemblyInfo) { assemblyInfo.IsSoftDeleted = true; }