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

Open
opened 2023-07-24 03:02:11 -05:00 by Tacodiva · 0 comments
Tacodiva commented 2023-07-24 03:02:11 -05:00 (Migrated from github.com)

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.

github.com/jbevain/cecil@56d4409b8a/Mono.Cecil.Cil/PortablePdb.cs (L485-L493)

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

I want to write an `AssemblyDefinition` with symbols embedded to a stream. I am doing: ```CS 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`. https://github.com/jbevain/cecil/blob/56d4409b8a0165830565c6e3f96f41bead2c418b/Mono.Cecil.Cil/PortablePdb.cs#L485-L493 Because of this check, it seems to be impossible to write embedded symbols without writing into a file.
Sign in to join this conversation.
No milestone
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
gh-jbevain/cecil#920
No description provided.