public void Write ()
{
FileStream out_stream = null;
try {
if (ThisModule == null)
this_module = new Module (Path.GetFileName (output_file));
out_stream = new FileStream (output_file, FileMode.Create, FileAccess.Write);
pefile = new PEFile (ThisAssembly != null ? ThisAssembly.Name : null, ThisModule.Name, is_dll, ThisAssembly != null, null, out_stream);
PEAPI.Assembly asmb = pefile.GetThisAssembly ();
ThisModule.PeapiModule = pefile.GetThisModule ();
if (file_ref != null)
file_ref.Resolve (this);
extern_table.Resolve (this);
type_manager.DefineAll ();
if (manifestResources != null) {
foreach (ManifestResource mr in manifestResources)
pefile.AddManifestResource (mr);
}
foreach (FieldDef fielddef in global_field_table.Values) {
fielddef.Define (this);
}
foreach (MethodDef methoddef in global_method_table.Values) {
methoddef.Define (this);
}
foreach (TypeDef typedef in defcont_list) {
typedef.DefineContents (this);
}
if (ThisAssembly != null)
ThisAssembly.Resolve (this, pefile.GetThisAssembly ());
ThisModule.Resolve (this, pefile.GetThisModule ());
if (sub_system != -1)
pefile.SetSubSystem ((PEAPI.SubSystem) sub_system);
if (cor_flags != -1)
pefile.SetCorFlags (cor_flags);
if (stack_reserve != -1)
pefile.SetStackReserve (stack_reserve);
pefile.WritePEFile ();
if (symwriter != null) {
Guid guid = pefile.GetThisModule ().Guid;
symwriter.Write (guid);
}
} finally {
if (out_stream != null)
out_stream.Close ();
}
}