public void Write(Stream stream, WriterParameters parameters) { Mixin.CheckStream(stream); if (!stream.CanWrite || !stream.CanSeek) { throw new ArgumentException(); } Mixin.CheckParameters(parameters); ModuleWriter.WriteModuleTo(this, stream, parameters); }
public static void WriteModuleTo(ModuleDefinition module, Stream stream, WriterParameters parameters) { if ((module.Attributes & ModuleAttributes.ILOnly) == (ModuleAttributes)0) { throw new NotSupportedException("Writing mixed-mode assemblies is not supported"); } if (module.HasImage && module.ReadingMode == ReadingMode.Deferred) { ImmediateModuleReader immediateModuleReader = new ImmediateModuleReader(module.Image); immediateModuleReader.ReadModule(module, false); } module.MetadataSystem.Clear(); AssemblyNameDefinition assemblyNameDefinition = (module.assembly != null) ? module.assembly.Name : null; 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 && assemblyNameDefinition != null) { assemblyNameDefinition.PublicKey = parameters.StrongNameKeyPair.PublicKey; module.Attributes |= ModuleAttributes.StrongNameSigned; } MetadataBuilder metadata = new MetadataBuilder(module, fullyQualifiedName, symbolWriterProvider, symbolWriter); ModuleWriter.BuildMetadata(module, metadata); if (module.symbol_reader != null) { module.symbol_reader.Dispose(); } ImageWriter imageWriter = ImageWriter.CreateWriter(module, metadata, stream); imageWriter.WriteImage(); if (parameters.StrongNameKeyPair != null) { CryptoService.StrongName(stream, imageWriter, parameters.StrongNameKeyPair); } if (symbolWriter != null) { symbolWriter.Dispose(); } }