예제 #1
0
 public virtual void SaveModule(Module module, CompilerParameters options, CompilerResults results){
   if (module == null || options == null || results == null){Debug.Assert(false); return;}
   AssemblyReferenceList arefs = module.AssemblyReferences;
   //TODO: give the error in the context of the member that made the reference
   for (int i = 0, n = arefs == null ? 0 : arefs.Count; i < n; i++){
     AssemblyReference aref = arefs[i];
     if (aref == null || aref.Assembly == null) continue;
     ArrayList metadataErrors = aref.Assembly.MetadataImportErrors;
     if (metadataErrors == null) continue;
     foreach (Exception mdErr in metadataErrors)
       if (mdErr.Message.StartsWith("Assembly reference not resolved"))
         results.Errors.Add(new CompilerError(aref.Assembly.Name+".dll", 0, 0, "0", mdErr.Message));
   }
   if (results.NativeCompilerReturnValue != 0) return; //TODO: allow option to override this
   ErrorNodeList errors = new ErrorNodeList(0);
   string fileName = this.GetTargetFileName(options, errors);
   this.AddResourcesAndIcons(module, options, errors);
   if (errors.Count == 0){
     module.WriteModule(fileName, options);
     CompilerOptions coptions = options as CompilerOptions;
     if (coptions != null && coptions.XMLDocFileName != null && coptions.XMLDocFileName.Length > 0)
       module.WriteDocumentation(new StreamWriter(coptions.XMLDocFileName));
     results.PathToAssembly = fileName;
   }else{
     this.ProcessErrors(options, results, errors);
   }
 }