Beispiel #1
0
        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();
            }
        }
Beispiel #2
0
 public void SetPublicKey(byte[] publicKey)
 {
     name.SetPublicKey(publicKey);
 }
Beispiel #3
0
 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;
 }
Beispiel #4
0
 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;
 }