Skip to content

Mono.ArgumentNullOrEmptyException When trying to write embedded symbols assembly to stream #920

@Tacodiva

Description

@Tacodiva

I want to write an AssemblyDefinition with symbols embedded to a stream. I am doing:

definition.Write(byteStream, new() {
    WriteSymbols = true
});

But this throws an exception:

Mono.ArgumentNullOrEmptyException: Argument null or empty (Parameter 'fileName')
   at Mono.Cecil.Mixin.CheckFileName(String fileName)
   at Mono.Cecil.Cil.EmbeddedPortablePdbWriterProvider.GetSymbolWriter(ModuleDefinition module, String fileName)
   at Mono.Cecil.Cil.DefaultSymbolWriterProvider.GetSymbolWriter(ModuleDefinition module, String fileName)
   at Mono.Cecil.ModuleWriter.GetSymbolWriter(ModuleDefinition module, String fq_name, ISymbolWriterProvider symbol_writer_provider, WriterParameters parameters)
   at Mono.Cecil.ModuleWriter.Write(ModuleDefinition module, Disposable`1 stream, WriterParameters parameters)
   at Mono.Cecil.ModuleWriter.WriteModule(ModuleDefinition module, Disposable`1 stream, WriterParameters parameters)
   at Mono.Cecil.ModuleDefinition.Write(Stream stream, WriterParameters parameters)
   at Mono.Cecil.AssemblyDefinition.Write(Stream stream, WriterParameters parameters)
   ...

I have not tested this, but I believe the call to CheckFileName in EmbeddedPortablePdbWriterProvider.GetSymbolWriter is not necessary, as I don't think the file name is used by EmbeddedPortablePdbWriter.

public ISymbolWriter GetSymbolWriter (ModuleDefinition module, string fileName)
{
Mixin.CheckModule (module);
Mixin.CheckFileName (fileName);
var stream = new MemoryStream ();
var pdb_writer = (PortablePdbWriter) new PortablePdbWriterProvider ().GetSymbolWriter (module, stream);
return new EmbeddedPortablePdbWriter (stream, pdb_writer);
}

Because of this check, it seems to be impossible to write embedded symbols without writing into a file.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions