MetadataWriter constructor

MetadataWriter({
  1. required String name,
  2. int majorVersion = 0xFF,
  3. int minorVersion = 0xFF,
  4. int buildNumber = 0xFF,
  5. int revisionNumber = 0xFF,
  6. AssemblyFlags flags = AssemblyFlags.windowsRuntime,
  7. Guid? mvid,
})

Constructs a new MetadataWriter instance with the specified assembly and module information.

If mvid is omitted, a new GUID is generated for the module.

Implementation

factory MetadataWriter({
  required String name,
  int majorVersion = 0xFF,
  int minorVersion = 0xFF,
  int buildNumber = 0xFF,
  int revisionNumber = 0xFF,
  AssemblyFlags flags = AssemblyFlags.windowsRuntime,
  Guid? mvid,
}) {
  final writer = MetadataWriter._();

  // This assembly.
  writer._tableStream[MetadataTableId.assembly].add(
    Assembly(
      hashAlgId: AssemblyHashAlgorithm.sha1,
      majorVersion: majorVersion,
      minorVersion: minorVersion,
      buildNumber: buildNumber,
      revisionNumber: revisionNumber,
      flags: flags,
      name: writer._stringHeap.insert(p.basenameWithoutExtension(name)),
    ),
  );

  // This module.
  writer._tableStream[MetadataTableId.module].add(
    Module(
      name: writer._stringHeap.insert(name),
      mvid: writer._guidHeap.insert(mvid ?? Guid.generate()),
    ),
  );

  writer
    // Some parsers will fail to read without a "mscorlib" reference implied
    // by "System" types.
    ..writeAssemblyRef(namespace: 'System')
    // The parent type of "globals" expected by most parsers.
    ..writeTypeDef(namespace: '', name: '<Module>');

  return writer;
}