private void InitializeTypeForwarder(ForwarderKey key, TypeForwarder record) { Cts.Ecma.EcmaModule module = key.Module; Ecma.MetadataReader reader = module.MetadataReader; Ecma.ExportedType exportedType = reader.GetExportedType(key.ExportedType); record.Name = HandleString(reader.GetString(exportedType.Name)); switch (exportedType.Implementation.Kind) { case Ecma.HandleKind.AssemblyReference: { string ns = reader.GetString(exportedType.Namespace); NamespaceDefinition namespaceDefinition = HandleNamespaceDefinition(module, ns); Ecma.AssemblyReference assemblyRef = reader.GetAssemblyReference((Ecma.AssemblyReferenceHandle)exportedType.Implementation); AssemblyName refName = new AssemblyName { ContentType = (AssemblyContentType)((int)(assemblyRef.Flags & AssemblyFlags.ContentTypeMask) >> 9), Flags = (AssemblyNameFlags)(assemblyRef.Flags & ~AssemblyFlags.ContentTypeMask), CultureName = reader.GetString(assemblyRef.Culture), Name = reader.GetString(assemblyRef.Name), Version = assemblyRef.Version, }; if ((assemblyRef.Flags & AssemblyFlags.PublicKey) != 0) { refName.SetPublicKey(reader.GetBlobBytes(assemblyRef.PublicKeyOrToken)); } else { refName.SetPublicKeyToken(reader.GetBlobBytes(assemblyRef.PublicKeyOrToken)); } record.Scope = HandleScopeReference(refName); namespaceDefinition.TypeForwarders.Add(record); } break; case Ecma.HandleKind.ExportedType: { TypeForwarder scope = HandleTypeForwarder(module, (Ecma.ExportedTypeHandle)exportedType.Implementation); record.Scope = scope.Scope; scope.NestedTypes.Add(record); } break; default: throw new BadImageFormatException(); } }
public void SetPublicKey(byte[] publicKey) { name.SetPublicKey(publicKey); }
public System.Reflection.AssemblyName GetAssemblyName() { if(this.assemblyName == null) { System.Reflection.AssemblyName aName = new System.Reflection.AssemblyName(); aName.CultureInfo = new System.Globalization.CultureInfo(this.Culture == null ? "" : this.Culture); if(this.PublicKeyOrToken != null && this.PublicKeyOrToken.Length > 8) aName.Flags = System.Reflection.AssemblyNameFlags.PublicKey; if((this.Flags & AssemblyFlags.Retargetable) != 0) aName.Flags |= (System.Reflection.AssemblyNameFlags)AssemblyFlags.Retargetable; aName.HashAlgorithm = System.Configuration.Assemblies.AssemblyHashAlgorithm.SHA1; if(this.PublicKeyOrToken != null) { if(this.PublicKeyOrToken.Length > 8) aName.SetPublicKey(this.PublicKeyOrToken); else if(this.PublicKeyOrToken.Length > 0) aName.SetPublicKeyToken(this.PublicKeyOrToken); } else aName.SetPublicKey(new byte[0]); aName.Name = this.Name; aName.Version = this.Version; switch(this.Flags & AssemblyFlags.CompatibilityMask) { case AssemblyFlags.NonSideBySideCompatible: aName.VersionCompatibility = System.Configuration.Assemblies.AssemblyVersionCompatibility.SameDomain; break; case AssemblyFlags.NonSideBySideProcess: aName.VersionCompatibility = System.Configuration.Assemblies.AssemblyVersionCompatibility.SameProcess; break; case AssemblyFlags.NonSideBySideMachine: aName.VersionCompatibility = System.Configuration.Assemblies.AssemblyVersionCompatibility.SameMachine; break; } this.assemblyName = aName; } return this.assemblyName; }
public System.Reflection.AssemblyName GetAssemblyName() { if(this.assemblyName == null) { System.Reflection.AssemblyName aName = new System.Reflection.AssemblyName(); if(this.Location != null && this.Location != "unknown:location") { StringBuilder sb = new StringBuilder("file:///"); sb.Append(Path.GetFullPath(this.Location)); sb.Replace('\\', '/'); aName.CodeBase = sb.ToString(); } aName.CultureInfo = new System.Globalization.CultureInfo(this.Culture); if(this.PublicKeyOrToken != null && this.PublicKeyOrToken.Length > 8) aName.Flags = System.Reflection.AssemblyNameFlags.PublicKey; if((this.Flags & AssemblyFlags.Retargetable) != 0) aName.Flags |= (System.Reflection.AssemblyNameFlags)AssemblyFlags.Retargetable; aName.HashAlgorithm = (System.Configuration.Assemblies.AssemblyHashAlgorithm)this.HashAlgorithm; if(this.PublicKeyOrToken != null && this.PublicKeyOrToken.Length > 0) aName.SetPublicKey(this.PublicKeyOrToken); else aName.SetPublicKey(new byte[0]); aName.Name = this.Name; aName.Version = this.Version; switch(this.Flags & AssemblyFlags.CompatibilityMask) { case AssemblyFlags.NonSideBySideCompatible: aName.VersionCompatibility = System.Configuration.Assemblies.AssemblyVersionCompatibility.SameDomain; break; case AssemblyFlags.NonSideBySideProcess: aName.VersionCompatibility = System.Configuration.Assemblies.AssemblyVersionCompatibility.SameProcess; break; case AssemblyFlags.NonSideBySideMachine: aName.VersionCompatibility = System.Configuration.Assemblies.AssemblyVersionCompatibility.SameMachine; break; } this.assemblyName = aName; } return this.assemblyName; }