示例#1
0
        internal virtual AssemblyNameReference ImportAssemblyName(AssemblyNameReference name)
        {
            AssemblyNameReference reference;

            if (module.TryGetAssemblyNameReference(name, out reference))
            {
                return(reference);
            }

            reference = new AssemblyNameReference(name.Name, name.Version)
            {
                Culture          = name.Culture,
                HashAlgorithm    = name.HashAlgorithm,
                IsRetargetable   = name.IsRetargetable,
                IsWindowsRuntime = name.IsWindowsRuntime,
            };

            var pk_token = !name.PublicKeyToken.IsNullOrEmpty()
                                ? new byte [name.PublicKeyToken.Length]
                                : Empty <byte> .Array;

            if (pk_token.Length > 0)
            {
                Buffer.BlockCopy(name.PublicKeyToken, 0, pk_token, 0, pk_token.Length);
            }

            reference.PublicKeyToken = pk_token;

            module.AssemblyReferences.Add(reference);

            return(reference);
        }
示例#2
0
文件: Import.cs 项目: silerdusk/cecil
        AssemblyNameReference ImportScope(SR.Assembly assembly)
        {
            AssemblyNameReference scope;

#if !SILVERLIGHT
            var name = assembly.GetName();

            if (TryGetAssemblyNameReference(name, out scope))
            {
                return(scope);
            }

            scope = new AssemblyNameReference(name.Name, name.Version)
            {
                Culture        = name.CultureInfo.Name,
                PublicKeyToken = name.GetPublicKeyToken(),
                HashAlgorithm  = (AssemblyHashAlgorithm)name.HashAlgorithm,
            };

            module.AssemblyReferences.Add(scope);

            return(scope);
#else
            var name = AssemblyNameReference.Parse(assembly.FullName);

            if (module.TryGetAssemblyNameReference(name, out scope))
            {
                return(scope);
            }

            module.AssemblyReferences.Add(name);

            return(name);
#endif
        }
示例#3
0
        static IMetadataScope GetMetadataScope(ModuleDefinition module, Type type_info)
        {
            if (string.IsNullOrEmpty(type_info.assembly))
            {
                return(module.TypeSystem.CoreLibrary);
            }

            AssemblyNameReference match;
            var reference = AssemblyNameReference.Parse(type_info.assembly);

            return(module.TryGetAssemblyNameReference(reference, out match)
                                ? match
                                : reference);
        }
示例#4
0
        private static IMetadataScope GetMetadataScope(ModuleDefinition module, Type type_info)
        {
            if (string.IsNullOrEmpty(type_info.assembly))
            {
                return(module.TypeSystem.CoreLibrary);
            }
            AssemblyNameReference assemblyNameReference = AssemblyNameReference.Parse(type_info.assembly);

            if (!module.TryGetAssemblyNameReference(assemblyNameReference, out AssemblyNameReference result))
            {
                return(assemblyNameReference);
            }
            return(result);
        }
示例#5
0
        AssemblyNameReference ImportAssemblyName(AssemblyNameReference name)
        {
            AssemblyNameReference reference;

            if (module.TryGetAssemblyNameReference(name, out reference))
            {
                return(reference);
            }

            // TA: Added for winrt support. TODO: check if this is still needed.
            if (name.Name == "mscorlib")
            {
                return((AssemblyNameReference)module.TypeSystem.CoreLibrary);
            }

            reference = new AssemblyNameReference(name.Name, name.Version)
            {
                Culture          = name.Culture,
                HashAlgorithm    = name.HashAlgorithm,
                IsRetargetable   = name.IsRetargetable,
                IsWindowsRuntime = name.IsWindowsRuntime,
            };

            var pk_token = !name.PublicKeyToken.IsNullOrEmpty()
                                ? new byte [name.PublicKeyToken.Length]
                                : Empty <byte> .Array;

            if (pk_token.Length > 0)
            {
                Buffer.BlockCopy(name.PublicKeyToken, 0, pk_token, 0, pk_token.Length);
            }

            reference.PublicKeyToken = pk_token;

            module.AssemblyReferences.Add(reference);

            return(reference);
        }
示例#6
0
 public virtual AssemblyNameReference ImportReference(AssemblyNameReference name)
 {
     Mixin.CheckName(name);
     if (module.TryGetAssemblyNameReference(name, out AssemblyNameReference assemblyNameReference))
     {
         return(assemblyNameReference);
     }
     assemblyNameReference = new AssemblyNameReference(name.Name, name.Version)
     {
         Culture          = name.Culture,
         HashAlgorithm    = name.HashAlgorithm,
         IsRetargetable   = name.IsRetargetable,
         IsWindowsRuntime = name.IsWindowsRuntime
     };
     byte[] array = (!name.PublicKeyToken.IsNullOrEmpty()) ? new byte[name.PublicKeyToken.Length] : Empty <byte> .Array;
     if (array.Length != 0)
     {
         Buffer.BlockCopy(name.PublicKeyToken, 0, array, 0, array.Length);
     }
     assemblyNameReference.PublicKeyToken = array;
     module.AssemblyReferences.Add(assemblyNameReference);
     return(assemblyNameReference);
 }