public void Write(string fileName, WriterParameters parameters) { Mixin.CheckParameters(parameters); var file = GetFileStream(fileName, FileMode.Create, FileAccess.ReadWrite, FileShare.Read); ModuleWriter.WriteModule(this, Disposable.Owned(file), parameters); }
public void Write(Stream stream, WriterParameters parameters) { Mixin.CheckStream(stream); Mixin.CheckWriteSeek(stream); Mixin.CheckParameters(parameters); ModuleWriter.WriteModule(this, Disposable.NotOwned(stream), parameters); }
public static void WriteModuleTo(ModuleDefinition module, Stream stream, WriterParameters parameters) { AssemblyNameDefinition name; if ((int)(module.Attributes & ModuleAttributes.ILOnly) == 0) { throw new NotSupportedException("Writing mixed-mode assemblies is not supported"); } if (module.HasImage && module.ReadingMode == ReadingMode.Deferred) { ImmediateModuleReader.ReadModule(module); } module.MetadataSystem.Clear(); if (module.assembly != null) { name = module.assembly.Name; } else { name = null; } AssemblyNameDefinition publicKey = name; string fullyQualifiedName = stream.GetFullyQualifiedName(); ISymbolWriterProvider symbolWriterProvider = parameters.SymbolWriterProvider; if (symbolWriterProvider == null && parameters.WriteSymbols) { symbolWriterProvider = SymbolProvider.GetPlatformWriterProvider(); } ISymbolWriter symbolWriter = ModuleWriter.GetSymbolWriter(module, fullyQualifiedName, symbolWriterProvider); if (parameters.StrongNameKeyPair != null && publicKey != null) { publicKey.PublicKey = parameters.StrongNameKeyPair.PublicKey; ModuleDefinition attributes = module; attributes.Attributes = attributes.Attributes | ModuleAttributes.StrongNameSigned; } MetadataBuilder metadataBuilder = new MetadataBuilder(module, fullyQualifiedName, symbolWriterProvider, symbolWriter); ModuleWriter.BuildMetadata(module, metadataBuilder); if (module.symbol_reader != null) { module.symbol_reader.Dispose(); } ImageWriter imageWriter = ImageWriter.CreateWriter(module, metadataBuilder, stream); imageWriter.WriteImage(); if (parameters.StrongNameKeyPair != null) { CryptoService.StrongName(stream, imageWriter, parameters.StrongNameKeyPair); } if (symbolWriter != null) { symbolWriter.Dispose(); } }
public void Write(Stream stream, WriterParameters parameters) { ModuleDefinition.CheckStream(stream); if (!stream.CanWrite || !stream.CanSeek) { throw new ArgumentException(); } Mixin.CheckParameters(parameters); ModuleWriter.WriteModuleTo(this, stream, parameters); }