コード例 #1
0
		private AssemblyName GetNameImpl(ref AssemblyTable.Record rec)
		{
			AssemblyName name = new AssemblyName();
			name.Name = manifestModule.GetString(rec.Name);
			name.Version = new Version(rec.MajorVersion, rec.MinorVersion, rec.BuildNumber, rec.RevisionNumber);
			if (rec.PublicKey != 0)
			{
				name.SetPublicKey(manifestModule.GetBlobCopy(rec.PublicKey));
			}
			else
			{
				name.SetPublicKey(Empty<byte>.Array);
			}
			if (rec.Culture != 0)
			{
				name.Culture = manifestModule.GetString(rec.Culture);
			}
			else
			{
				name.Culture = "";
			}
			name.HashAlgorithm = (AssemblyHashAlgorithm)rec.HashAlgId;
			name.CodeBase = this.CodeBase;
			name.RawFlags = (AssemblyNameFlags)rec.Flags;
			return name;
		}
コード例 #2
0
		private AssemblyName GetNameImpl(ref AssemblyTable.Record rec)
		{
			AssemblyName name = new AssemblyName();
			name.Name = manifestModule.GetString(rec.Name);
			name.Version = new Version(rec.MajorVersion, rec.MinorVersion, rec.BuildNumber, rec.RevisionNumber);
			if (rec.PublicKey != 0)
			{
				name.SetPublicKey(manifestModule.GetBlobCopy(rec.PublicKey));
			}
			else
			{
				name.SetPublicKey(Empty<byte>.Array);
			}
			if (rec.Culture != 0)
			{
				name.Culture = manifestModule.GetString(rec.Culture);
			}
			else
			{
				name.Culture = "";
			}
			name.HashAlgorithm = (AssemblyHashAlgorithm)rec.HashAlgId;
			name.CodeBase = this.CodeBase;
			PortableExecutableKinds peKind;
			ImageFileMachine machine;
			manifestModule.GetPEKind(out peKind, out machine);
			switch (machine)
			{
				case ImageFileMachine.I386:
					// FXBUG we copy the .NET bug that Preferred32Bit implies x86
					if ((peKind & (PortableExecutableKinds.Required32Bit | PortableExecutableKinds.Preferred32Bit)) != 0)
					{
						name.ProcessorArchitecture = ProcessorArchitecture.X86;
					}
					else if ((rec.Flags & 0x70) == 0x70)
					{
						// it's a reference assembly
						name.ProcessorArchitecture = ProcessorArchitecture.None;
					}
					else
					{
						name.ProcessorArchitecture = ProcessorArchitecture.MSIL;
					}
					break;
				case ImageFileMachine.IA64:
					name.ProcessorArchitecture = ProcessorArchitecture.IA64;
					break;
				case ImageFileMachine.AMD64:
					name.ProcessorArchitecture = ProcessorArchitecture.Amd64;
					break;
				case ImageFileMachine.ARM:
					name.ProcessorArchitecture = ProcessorArchitecture.Arm;
					break;
			}
			name.RawFlags = (AssemblyNameFlags)rec.Flags;
			return name;
		}
コード例 #3
0
        /// <summary>
        /// Converts <see cref="FusionAssemblyIdentity.IAssemblyName"/> to <see cref="AssemblyName"/> with possibly
        /// missing name components.
        /// </summary>
        /// <returns>
        /// An <see cref="AssemblyName"/> whose fields are be null if not present in <paramref name="nameObject"/>.
        /// </returns>
        internal static AssemblyName ToAssemblyName(FusionAssemblyIdentity.IAssemblyName nameObject)
        {
            var result = new AssemblyName();

            result.Name    = FusionAssemblyIdentity.GetName(nameObject);
            result.Version = FusionAssemblyIdentity.GetVersion(nameObject);

            var cultureName = FusionAssemblyIdentity.GetCulture(nameObject);

            result.CultureInfo = (cultureName != null) ? new CultureInfo(cultureName) : null;

            byte[] publicKey = FusionAssemblyIdentity.GetPublicKey(nameObject);
            if (publicKey != null && publicKey.Length != 0)
            {
                result.SetPublicKey(publicKey);
            }
            else
            {
                result.SetPublicKeyToken(FusionAssemblyIdentity.GetPublicKeyToken(nameObject));
            }

            result.Flags       = FusionAssemblyIdentity.GetFlags(nameObject);
            result.ContentType = FusionAssemblyIdentity.GetContentType(nameObject);
            return(result);
        }
コード例 #4
0
        public static void FullName_WithPublicKey()
        {
            AssemblyName assemblyName = new AssemblyName("MyAssemblyName, Version=1.0.0.0");

            assemblyName.SetPublicKey(TheKey);
            Assert.Equal("MyAssemblyName, Version=1.0.0.0, PublicKeyToken=b03f5f7f11d50a3a", assemblyName.FullName);
        }
コード例 #5
0
        private static IRuntimeEnvironmentFactory GetFactoryImplementation()
        {
            string assemblyName;
            string typeName;

            if (DesktopShim.FileNotFoundException.Type != null)
            {
                assemblyName = "Roslyn.Test.Utilities.Desktop";
                typeName     = "Microsoft.CodeAnalysis.Test.Utilities.CodeRuntime.DesktopRuntimeEnvironmentFactory";
            }
            else
            {
                assemblyName = "Roslyn.Test.Utilities.CoreClr";
                typeName     = "Roslyn.Test.Utilities.CoreClrRuntimeEnvironmentFactory";
            }

            var thisAssemblyName = typeof(RuntimeEnvironmentFactory).GetTypeInfo().Assembly.GetName();
            var name             = new AssemblyName();

            name.Name    = assemblyName;
            name.Version = thisAssemblyName.Version;
            name.SetPublicKey(thisAssemblyName.GetPublicKey());
            name.CultureName           = thisAssemblyName.CultureName;
            name.ProcessorArchitecture = thisAssemblyName.ProcessorArchitecture;

            var assembly = Assembly.Load(name);
            var type     = assembly.GetType(typeName);

            return((IRuntimeEnvironmentFactory)Activator.CreateInstance(type));
        }
コード例 #6
0
ファイル: EcmaModule.cs プロジェクト: mskvortsov/corert
        private Object ResolveAssemblyReference(AssemblyReferenceHandle handle)
        {
            AssemblyReference assemblyReference = _metadataReader.GetAssemblyReference(handle);

            AssemblyName an = new AssemblyName();

            an.Name    = _metadataReader.GetString(assemblyReference.Name);
            an.Version = assemblyReference.Version;

            var publicKeyOrToken = _metadataReader.GetBlobBytes(assemblyReference.PublicKeyOrToken);

            if ((assemblyReference.Flags & AssemblyFlags.PublicKey) != 0)
            {
                an.SetPublicKey(publicKeyOrToken);
            }
            else
            {
                an.SetPublicKeyToken(publicKeyOrToken);
            }

            an.CultureName = _metadataReader.GetString(assemblyReference.Culture);
            an.ContentType = GetContentTypeFromAssemblyFlags(assemblyReference.Flags);

            return(Context.ResolveAssembly(an));
        }
コード例 #7
0
        public void SetPublicKey_GetPublicKey(byte[] publicKey)
        {
            AssemblyName assemblyName = new AssemblyName();

            assemblyName.SetPublicKey(publicKey);
            Assert.Equal(publicKey, assemblyName.GetPublicKey());
        }
コード例 #8
0
ファイル: assembly.cs プロジェクト: liquidboy/ILSpy
        protected AssemblyName CreateAssemblyName()
        {
            var an = new AssemblyName(name);

            if (public_key != null && RootContext.Target != Target.Module)
            {
                if (delay_sign)
                {
                    an.SetPublicKey(public_key);
                }
                else
                {
                    if (public_key.Length == 16)
                    {
                        Report.Error(1606, "Could not sign the assembly. ECMA key can only be used to delay-sign assemblies");
                    }
                    else if (private_key == null)
                    {
                        Error_AssemblySigning("The specified key file does not have a private key");
                    }
                    else
                    {
                        an.KeyPair = private_key;
                    }
                }
            }

            return(an);
        }
コード例 #9
0
        private Object ResolveAssemblyReference(AssemblyReferenceHandle handle)
        {
            AssemblyReference assemblyReference = _metadataReader.GetAssemblyReference(handle);

            AssemblyName an = new AssemblyName();

            an.Name    = _metadataReader.GetString(assemblyReference.Name);
            an.Version = assemblyReference.Version;

            var publicKeyOrToken = _metadataReader.GetBlobBytes(assemblyReference.PublicKeyOrToken);

            if ((assemblyReference.Flags & AssemblyFlags.PublicKey) != 0)
            {
                an.SetPublicKey(publicKeyOrToken);
            }
            else
            {
                an.SetPublicKeyToken(publicKeyOrToken);
            }

            an.CultureName = _metadataReader.GetString(assemblyReference.Culture);
            an.ContentType = GetContentTypeFromAssemblyFlags(assemblyReference.Flags);

            var assembly = _moduleResolver.ResolveAssembly(an, throwIfNotFound: false);

            if (assembly == null)
            {
                return(ResolutionFailure.GetAssemblyResolutionFailure(an.Name));
            }
            else
            {
                return(assembly);
            }
        }
コード例 #10
0
    public bool PosTest3()
    {
        TestLibrary.TestFramework.BeginScenario("PosTest2: set a null key then get and verify");
        bool retVal = true;

        try
        {
            byte[] key = null;

            AssemblyName an = new AssemblyName();
            an.SetPublicKey(key);

            if (an.GetPublicKey() != key)
            {
                TestLibrary.TestFramework.LogError("003.1", "expect AssemblyName.GetPublicKey() equals what it's been set");
                retVal = false;
            }
        }
        catch (Exception e)
        {
            TestLibrary.TestFramework.LogError("003.2", "Unexpected exception: " + e);
            retVal = false;
        }
        return(retVal);
    }
コード例 #11
0
        // https://github.com/Microsoft/msbuild/issues/4002
        // https://github.com/dotnet/corefx/issues/34008
        //
        // We do not use AssemblyReference.GetAssemblyName() here because its behavior
        // is different from other code paths with respect to neutral culture. We will
        // get unspecified culture instead of explicitly neutral culture. This in turn
        // leads string comparisons of assembly-name-modulo-version in RAR to false
        // negatives that break its conflict resolution and binding redirect generation.
        private static AssemblyName GetAssemblyName(MetadataReader metadataReader, AssemblyReferenceHandle handle)
        {
            var entry = metadataReader.GetAssemblyReference(handle);

            var assemblyName = new AssemblyName
            {
                Name        = metadataReader.GetString(entry.Name),
                Version     = entry.Version,
                CultureName = metadataReader.GetString(entry.Culture)
            };

            var publicKeyOrToken = metadataReader.GetBlobBytes(entry.PublicKeyOrToken);

            if (publicKeyOrToken != null)
            {
                if (publicKeyOrToken.Length <= 8)
                {
                    assemblyName.SetPublicKeyToken(publicKeyOrToken);
                }
                else
                {
                    assemblyName.SetPublicKey(publicKeyOrToken);
                }
            }

            assemblyName.Flags = (AssemblyNameFlags)(int)entry.Flags;
            return(assemblyName);
        }
コード例 #12
0
        private void HandleSatelliteMissing()
        {
            String satAssemName = _mediator.MainAssembly.GetName().Name + ".resources.dll";

            if (_mediator.SatelliteContractVersion != null)
            {
                satAssemName += ", Version=" + _mediator.SatelliteContractVersion.ToString();
            }

            AssemblyName an = new AssemblyName();

            an.SetPublicKey(_mediator.MainAssembly.GetName().GetPublicKey());
            byte[] token = an.GetPublicKeyToken();

            int           iLen         = token.Length;
            StringBuilder publicKeyTok = new StringBuilder(iLen * 2);

            for (int i = 0; i < iLen; i++)
            {
                publicKeyTok.Append(token[i].ToString("x", CultureInfo.InvariantCulture));
            }
            satAssemName += ", PublicKeyToken=" + publicKeyTok;

            String missingCultureName = _mediator.NeutralResourcesCulture.Name;

            if (missingCultureName.Length == 0)
            {
                missingCultureName = "<invariant>";
            }
            throw new MissingSatelliteAssemblyException(SR.Format(SR.MissingSatelliteAssembly_Culture_Name, _mediator.NeutralResourcesCulture, satAssemName), missingCultureName);
        }
コード例 #13
0
        internal AssemblyName GetAssemblyName(StringHandle nameHandle, Version version, StringHandle cultureHandle, BlobHandle publicKeyOrTokenHandle, AssemblyHashAlgorithm assemblyHashAlgorithm, AssemblyFlags flags)
        {
            string name          = GetString(nameHandle);
            string cultureName   = (!cultureHandle.IsNil) ? GetString(cultureHandle) : null;
            var    hashAlgorithm = (Configuration.Assemblies.AssemblyHashAlgorithm)assemblyHashAlgorithm;

            byte[] publicKeyOrToken = !publicKeyOrTokenHandle.IsNil ? GetBlobBytes(publicKeyOrTokenHandle) : null;

            var assemblyName = new AssemblyName(name)
            {
                Version       = version,
                CultureName   = cultureName,
                HashAlgorithm = hashAlgorithm,
                Flags         = GetAssemblyNameFlags(flags),
                ContentType   = GetContentTypeFromAssemblyFlags(flags)
            };

            bool hasPublicKey = (flags & AssemblyFlags.PublicKey) != 0;

            if (hasPublicKey)
            {
                assemblyName.SetPublicKey(publicKeyOrToken);
            }
            else
            {
                assemblyName.SetPublicKeyToken(publicKeyOrToken);
            }

            return(assemblyName);
        }
コード例 #14
0
        private int LoadAssemblyInternal(LuaState luaState)
        {
            try {
                string    assemblyName = LuaLib.LuaToString(luaState, 1).ToString();
                Assembly  assembly     = null;
                Exception exception    = null;

                try {
#if NETFX_CORE
                    assembly = Assembly.Load(new AssemblyName(assemblyName));
#else
                    assembly = Assembly.Load(assemblyName);
#endif
                } catch (BadImageFormatException) {
                    // The assemblyName was invalid.  It is most likely a path.
                } catch (FileNotFoundException e) {
                    exception = e;
                }

#if !SILVERLIGHT && !NETFX_CORE
                if (assembly == null)
                {
                    try {
                        assembly = Assembly.Load(AssemblyName.GetAssemblyName(assemblyName));
                    } catch (FileNotFoundException e) {
                        exception = e;
                    }
                    if (assembly == null)
                    {
                        AssemblyName mscor = assemblies [0].GetName();
                        AssemblyName name  = new AssemblyName();
                        name.Name        = assemblyName;
                        name.CultureInfo = mscor.CultureInfo;
                        name.Version     = mscor.Version;
                        name.SetPublicKeyToken(mscor.GetPublicKeyToken());
                        name.SetPublicKey(mscor.GetPublicKey());
                        assembly = Assembly.Load(name);

                        if (assembly != null)
                        {
                            exception = null;
                        }
                    }
                    if (exception != null)
                    {
                        ThrowError(luaState, exception);
                    }
                }
#endif
                if (assembly != null && !assemblies.Contains(assembly))
                {
                    assemblies.Add(assembly);
                }
            } catch (Exception e) {
                ThrowError(luaState, e);
            }

            return(0);
        }
コード例 #15
0
    public static void Main()
    {
        // Create a dynamic assembly with name 'MyAssembly' and build version '1.0.0.2001'.
        AssemblyName myAssemblyName = new AssemblyName();

        // Set the codebase to the physical directory were the assembly resides.
        myAssemblyName.CodeBase = Directory.GetCurrentDirectory();
        // Set the culture information of the assembly to 'English-American'.
        myAssemblyName.CultureInfo = new CultureInfo("en-US");
        // Set the hash algoritm to 'SHA1'.
        myAssemblyName.HashAlgorithm        = AssemblyHashAlgorithm.SHA1;
        myAssemblyName.VersionCompatibility = AssemblyVersionCompatibility.SameProcess;
        myAssemblyName.Flags = AssemblyNameFlags.PublicKey;
        // Get the whole contents of the 'PublicKey.snk' into a byte array.
        FileStream publicKeyStream = File.Open("PublicKey.snk", FileMode.Open);

        byte[] publicKey = new byte[publicKeyStream.Length];
        publicKeyStream.Read(publicKey, 0, (int)publicKeyStream.Length);
        // Provide the assembly with a public key.
        myAssemblyName.SetPublicKey(publicKey);
        // Get the whole contents of the 'PublicKeyToken.snk' into a byte array.
        FileStream publicKeyTokenStream = File.Open("PublicKeyToken.snk", FileMode.Open);

        byte[] publicKeyToken = new Byte[publicKeyTokenStream.Length];
        publicKeyTokenStream.Read(publicKeyToken, 0, (int)publicKeyToken.Length);
        // Provide the assembly with a public key token.
        myAssemblyName.SetPublicKeyToken(publicKeyToken);
        myAssemblyName.Name    = "MyAssembly";
        myAssemblyName.Version = new Version("1.0.0.2001");
        MakeAssembly(myAssemblyName, "MyAssembly.exe");

        // Get the assemblies loaded in the current application domain.
        Assembly[] myAssemblies = Thread.GetDomain().GetAssemblies();

        // Get the dynamic assembly named 'MyAssembly'.
        Assembly myAssembly = null;

        for (int i = 0; i < myAssemblies.Length; i++)
        {
            if (String.Compare(myAssemblies[i].GetName().Name, "MyAssembly") == 0)
            {
                myAssembly = myAssemblies[i];
            }
        }

        // Display the full assembly information to the console.
        if (myAssembly != null)
        {
            Console.WriteLine("\nDisplaying the full assembly name\n");
            string assemblyName = myAssembly.GetName().FullName;
            Console.WriteLine(assemblyName);
            Console.WriteLine("\nDisplaying the public key for the assembly\n");
            byte[] publicKeyBytes = myAssembly.GetName().GetPublicKey();
            Console.WriteLine(Encoding.ASCII.GetString(publicKeyBytes));
            Console.WriteLine("\nDisplaying the public key token for the assembly\n");
            byte[] publicKeyTokenBytes = myAssembly.GetName().GetPublicKeyToken();
            Console.WriteLine(Encoding.ASCII.GetString(publicKeyTokenBytes));
        }
    }
コード例 #16
0
            public ProxyAssembly(string name)
            {
                AssemblyName assemblyName = new AssemblyName(name);

                assemblyName.SetPublicKey(this.GetType().GetTypeInfo().Assembly.GetName().GetPublicKey());
                this.asmBuilder    = AssemblyBuilder.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
                this.moduleBuilder = asmBuilder.DefineDynamicModule("testmod");
            }
コード例 #17
0
        public DynamicAssembly(string moduleName)
        {
            var assemblyName = new AssemblyName(moduleName);

            assemblyName.SetPublicKey(PublicKey);
            this.assemblyBuilder = AssemblyBuilder.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
            this.moduleBuilder   = assemblyBuilder.DefineDynamicModule(moduleName);
        }
コード例 #18
0
        /// <summary>
        /// 创建程序集
        /// </summary>
        /// <returns></returns>
        private AssemblyBuilder PrepareAssemBlyBuilder()
        {
            AssemblyBuilder tempAssemblyBuilder = null;
            AssemblyName    useAssemblyName     = new AssemblyName(m_strBaseAssemblyName + Guid.NewGuid().ToString());

            useAssemblyName.SetPublicKey(Assembly.GetExecutingAssembly().GetName().GetPublicKey());
            tempAssemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(useAssemblyName, AssemblyBuilderAccess.Run);
            return(tempAssemblyBuilder);
        }
コード例 #19
0
        /// <summary>
        /// To be used as a delegate. Gets the AssemblyName of the given file.
        /// </summary>
        /// <param name="path"></param>
        /// <returns></returns>
        internal static AssemblyNameExtension GetAssemblyNameEx(string path)
        {
            AssemblyName assemblyName = null;

#if FEATURE_ASSEMBLY_LOADFROM
            try
            {
                assemblyName = AssemblyName.GetAssemblyName(path);
            }
            catch (System.IO.FileLoadException)
            {
                // Its pretty hard to get here, you need an assembly that contains a valid reference
                // to a dependent assembly that, in turn, throws a FileLoadException during GetAssemblyName.
                // Still it happened once, with an older version of the CLR.

                // ...falling through and relying on the targetAssemblyName==null behavior below...
            }
            catch (System.IO.FileNotFoundException)
            {
                // Its pretty hard to get here, also since we do a file existence check right before calling this method so it can only happen if the file got deleted between that check and this call.
            }
#else
            using (var stream = File.OpenRead(path))
                using (var peFile = new PEReader(stream))
                {
                    bool hasMetadata = false;
                    try
                    {
                        // This can throw if the stream is too small, which means
                        // the assembly doesn't have metadata.
                        hasMetadata = peFile.HasMetadata;
                    }
                    finally
                    {
                        // If the file does not contain PE metadata, throw BadImageFormatException to preserve
                        // behavior from AssemblyName.GetAssemblyName(). RAR will deal with this correctly.
                        if (!hasMetadata)
                        {
                            throw new BadImageFormatException(string.Format(CultureInfo.CurrentCulture,
                                                                            AssemblyResources.GetString("ResolveAssemblyReference.AssemblyDoesNotContainPEMetadata"),
                                                                            path));
                        }
                    }

                    var metadataReader = peFile.GetMetadataReader();
                    var entry          = metadataReader.GetAssemblyDefinition();

                    assemblyName             = new AssemblyName();
                    assemblyName.Name        = metadataReader.GetString(entry.Name);
                    assemblyName.Version     = entry.Version;
                    assemblyName.CultureName = metadataReader.GetString(entry.Culture);
                    assemblyName.SetPublicKey(metadataReader.GetBlobBytes(entry.PublicKey));
                    assemblyName.Flags = (AssemblyNameFlags)(int)entry.Flags;
                }
#endif
            return(assemblyName == null ? null : new AssemblyNameExtension(assemblyName));
        }
コード例 #20
0
        internal static ModuleBuilder CreateModule(string name)
        {
            var assemblyName = new AssemblyName(name);

            assemblyName.SetPublicKey(Convert.FromBase64String("ACQAAASAAACUAAAABgIAAAAkAABSU0ExAAQAAAEAAQDZAJwN9Rn4Om4Qwz1i4sVhZ0Mf9p6t9OEuXu8D/s9N1N4FKL8eh1REUxAnFNhK6lmIxEb5UAMWXBtJ3WQ4kVCo3FKIJAXX+MYemcRD+YLKkK/ZEHb3m3KwbQ7La456yxhoXh1+5XlA7StUhj3dW3jfDkWzOHhKlxSeOznDqBjb6g=="));

            return(AssemblyBuilder
                   .DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run)
                   .DefineDynamicModule(name));
        }
コード例 #21
0
        static ProxyObservable()
        {
            AssemblyName assemblyName = new AssemblyName("Generic.UI.Proxy.Dynamic");

            assemblyName.SetPublicKey(Assembly.GetExecutingAssembly().GetName().GetPublicKey());
            AssemblyBuilder assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);

            ProxyObservable.TypeCache     = new Dictionary <string, Type>();
            ProxyObservable.DynamicModule = assemblyBuilder.DefineDynamicModule("Notify");
        }
コード例 #22
0
        static RpcObjectRepository()
        {
            var name = new AssemblyName("RpcDynamicTypes");

            name.SetPublicKey(typeof(RpcObjectRepository).Assembly.GetName().GetPublicKey());
            var assemblyBuilder = AssemblyBuilder.DefineDynamicAssembly(name,
                                                                        AssemblyBuilderAccess.Run);

            _moduleBuilder = assemblyBuilder.DefineDynamicModule("RpcDynamicTypes.dll");
        }
コード例 #23
0
        private Assembly CreateReferenceAssembly(Version version, byte[] publicKey)
        {
            var name = new AssemblyName(typeof(TypeNameTemplateResolverTest).Name + "_ReferenceAssembly");

            name.Version = version;
            name.SetPublicKey(publicKey);

            // TODO .NET 4: Should actually be RunAndCollect
            return(AppDomain.CurrentDomain.DefineDynamicAssembly(name, AssemblyBuilderAccess.ReflectionOnly));
        }
コード例 #24
0
        internal override AssemblyName UnprotectedGetName()
        {
            AssemblyName an = base.UnprotectedGetName();

            if (sn != null)
            {
                an.SetPublicKey(sn.PublicKey);
            }
            return(an);
        }
コード例 #25
0
        private AssemblyName GetNameImpl(ref AssemblyTable.Record rec)
        {
            AssemblyName name = new AssemblyName();

            name.Name    = manifestModule.GetString(rec.Name);
            name.Version = new Version(rec.MajorVersion, rec.MinorVersion, rec.BuildNumber, rec.RevisionNumber);
            if (rec.PublicKey != 0)
            {
                name.SetPublicKey(manifestModule.GetBlobCopy(rec.PublicKey));
            }
            else
            {
                name.SetPublicKey(Empty <byte> .Array);
            }
            if (rec.Culture != 0)
            {
                name.CultureInfo = new System.Globalization.CultureInfo(manifestModule.GetString(rec.Culture));
            }
            else
            {
                name.CultureInfo = System.Globalization.CultureInfo.InvariantCulture;
            }
            switch (rec.HashAlgId)
            {
            case 0:
                name.HashAlgorithm = AssemblyHashAlgorithm.None;
                break;

            case 0x8003:
                name.HashAlgorithm = AssemblyHashAlgorithm.MD5;
                break;

            case 0x8004:
                name.HashAlgorithm = AssemblyHashAlgorithm.SHA1;
                break;

            default:
                throw new BadImageFormatException();
            }
            name.CodeBase = this.CodeBase;
            name.Flags    = (AssemblyNameFlags)rec.Flags;
            return(name);
        }
コード例 #26
0
ファイル: Helpers.cs プロジェクト: zerodev1200/corefxlab
        public static byte[] ComputePublicKeyToken(this byte[] pkt)
        {
            // @TODO - https://github.com/dotnet/corefxlab/issues/2447 - This is not the best way to compute the PKT as AssemblyName
            // throws if the PK isn't a valid PK blob. That's not something we should block a metadata inspection tool for so we
            // should compute the PKT ourselves as soon as we can convince the CoreFx analyzers to let us use SHA1.
            AssemblyName an = new AssemblyName();

            an.SetPublicKey(pkt);
            return(an.GetPublicKeyToken());
        }
コード例 #27
0
        public void Case5_SetPublicKey()
        {
            AssemblyName n = new AssemblyName();

            byte[] barray = new byte[16];
            n.SetPublicKey(barray);

            byte[] barray_returned = n.GetPublicKey();
            Assert.NotNull(barray_returned);
            Assert.True(isEqual(barray, barray_returned));
        }
コード例 #28
0
        private static ModuleBuilder CreateProxyModule()
        {
            AssemblyName name = new AssemblyName("Gimela.Data.Mapping.Proxies");

            name.SetPublicKey(privateKey);
            name.SetPublicKeyToken(privateKeyToken);
            //AssemblyBuilder builder = AppDomain.CurrentDomain.DefineDynamicAssembly(name, AssemblyBuilderAccess.Run);
            AssemblyBuilder builder = AppDomain.CurrentDomain.DefineDynamicAssembly(name, AssemblyBuilderAccess.Run);

            return(builder.DefineDynamicModule("Gimela.Data.Mapping.Proxies.emit"));
        }
コード例 #29
0
        private static ModuleBuilder CreateProxyModule()
        {
            AssemblyName name = new AssemblyName("AutoMapper.Proxies");

            name.SetPublicKey(privateKey);
            name.SetPublicKeyToken(privateKeyToken);

            AssemblyBuilder builder = AssemblyBuilder.DefineDynamicAssembly(name, AssemblyBuilderAccess.Run);

            return(builder.DefineDynamicModule("AutoMapper.Proxies.emit"));
        }
コード例 #30
0
        static AOPFactory()
        {
            AssemblyName assemblyName = new AssemblyName {
                Name = ASSEMBLY_NAME
            };

            assemblyName.SetPublicKey(Assembly.GetExecutingAssembly().GetName().GetPublicKey());

            assembly = AppDomain.CurrentDomain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.RunAndSave);
            module   = assembly.DefineDynamicModule(MODULE_NAME, ASSEMBLY_NAME + ".dll");
        }
コード例 #31
0
ファイル: __AppDomain.cs プロジェクト: magicmoux/Puresharp
        static public ModuleBuilder DefineDynamicModule(this AppDomain domain, string name, string key)
        {
            var _name = new AssemblyName(name);

            _name.SetPublicKey(Enumerable.Range(0, key.Length).Where(_X => _X % 2 == 0).Select(_X => Convert.ToByte(key.Substring(_X, 2), 16)).ToArray());
            #if NET452
            return(domain.DefineDynamicAssembly(_name, AssemblyBuilderAccess.Run).DefineDynamicModule(string.Concat(Metadata <Module> .Type.Name, name), false));
            #else
            return(AssemblyBuilder.DefineDynamicAssembly(_name, AssemblyBuilderAccess.Run).DefineDynamicModule(string.Concat(Metadata <Module> .Type.Name, name)));
            #endif
        }
コード例 #32
0
        /// <summary>
        /// To be used as a delegate. Gets the AssemblyName of the given file.
        /// </summary>
        /// <param name="path"></param>
        /// <returns></returns>
        internal static AssemblyNameExtension GetAssemblyNameEx(string path)
        {
            AssemblyName assemblyName = null;

#if FEATURE_ASSEMBLY_LOADFROM && !MONO
            try
            {
                assemblyName = AssemblyName.GetAssemblyName(path);
            }
            catch (System.IO.FileLoadException)
            {
                // Its pretty hard to get here, you need an assembly that contains a valid reference
                // to a dependent assembly that, in turn, throws a FileLoadException during GetAssemblyName.
                // Still it happened once, with an older version of the CLR.

                // ...falling through and relying on the targetAssemblyName==null behavior below...
            }
            catch (System.IO.FileNotFoundException)
            {
                // Its pretty hard to get here, also since we do a file existence check right before calling this method so it can only happen if the file got deleted between that check and this call.
            }
#else
            using (var stream = File.OpenRead(path))
                using (var peFile = new PEReader(stream))
                {
                    var metadataReader = peFile.GetMetadataReader();

                    var entry = metadataReader.GetAssemblyDefinition();

                    assemblyName         = new AssemblyName();
                    assemblyName.Name    = metadataReader.GetString(entry.Name);
                    assemblyName.Version = entry.Version;
                    var cultureString = metadataReader.GetString(entry.Culture);
                    if (!NativeMethodsShared.IsMono)
                    {
                        // set_CultureName throws NotImplementedException on Mono
                        assemblyName.CultureName = cultureString;
                    }
                    else if (cultureString != null)
                    {
                        assemblyName.CultureInfo = new CultureInfo(cultureString);
                    }
                    assemblyName.SetPublicKey(metadataReader.GetBlobBytes(entry.PublicKey));
                    assemblyName.Flags = (AssemblyNameFlags)(int)entry.Flags;
                }
#endif
            if (assemblyName == null)
            {
                return(null);
            }
            return(new AssemblyNameExtension(assemblyName));
        }
コード例 #33
0
	static void Main(string[] args)
	{
		Universe universe = new Universe();
		AssemblyName name = new AssemblyName("System.Core");
		name.Version = new Version(3, 5);
		name.SetPublicKey(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 });
		AssemblyBuilder ab = universe.DefineDynamicAssembly(name, AssemblyBuilderAccess.Save);
		ModuleBuilder modb = ab.DefineDynamicModule("System.Core", "System.Core.dll");
		TypeBuilder tb = modb.DefineType("System.Runtime.CompilerServices.ExtensionAttribute", TypeAttributes.Class | TypeAttributes.Public | TypeAttributes.Sealed, universe.Import(typeof(Attribute)));
		tb.DefineDefaultConstructor(MethodAttributes.Public);
		tb.CreateType();
		ab.Save("System.Core.dll");
	}
コード例 #34
0
		private AssemblyName GetNameImpl(ref AssemblyTable.Record rec)
		{
			AssemblyName name = new AssemblyName();
			name.Name = manifestModule.GetString(rec.Name);
			name.Version = new Version(rec.MajorVersion, rec.MinorVersion, rec.BuildNumber, rec.RevisionNumber);
			if (rec.PublicKey != 0)
			{
				name.SetPublicKey(manifestModule.GetBlobCopy(rec.PublicKey));
			}
			else
			{
				name.SetPublicKey(Empty<byte>.Array);
			}
			if (rec.Culture != 0)
			{
				name.CultureInfo = new System.Globalization.CultureInfo(manifestModule.GetString(rec.Culture));
			}
			else
			{
				name.CultureInfo = System.Globalization.CultureInfo.InvariantCulture;
			}
			switch (rec.HashAlgId)
			{
				case 0:
					name.HashAlgorithm = AssemblyHashAlgorithm.None;
					break;
				case 0x8003:
					name.HashAlgorithm = AssemblyHashAlgorithm.MD5;
					break;
				case 0x8004:
					name.HashAlgorithm = AssemblyHashAlgorithm.SHA1;
					break;
				default:
					throw new BadImageFormatException();
			}
			name.CodeBase = this.CodeBase;
			name.Flags = (AssemblyNameFlags)rec.Flags;
			return name;
		}
コード例 #35
0
    public bool PosTest2()
    {
        TestLibrary.TestFramework.BeginScenario("PosTest2: set a 0 length key then get and verify");
        bool retVal = true;
        try
        {
            byte[] key = new byte[0];

            AssemblyName an = new AssemblyName();
            an.SetPublicKey(key);

            if (an.GetPublicKey() != key)
            {
                TestLibrary.TestFramework.LogError("002.1", "expect AssemblyName.GetPublicKey() equals what it's been set");
                retVal = false;
            }
        }
        catch (Exception e)
        {
            TestLibrary.TestFramework.LogError("002.2", "Unexpected exception: " + e);
            retVal = false;
        }
        return retVal;
    }
コード例 #36
0
ファイル: ModuleReader.cs プロジェクト: kenasogoo/ikvm-fork
 public override AssemblyName[] __GetReferencedAssemblies()
 {
     List<AssemblyName> list = new List<AssemblyName>();
     for (int i = 0; i < AssemblyRef.records.Length; i++)
     {
         AssemblyName name = new AssemblyName();
         name.Name = GetString(AssemblyRef.records[i].Name);
         name.Version = new Version(
             AssemblyRef.records[i].MajorVersion,
             AssemblyRef.records[i].MinorVersion,
             AssemblyRef.records[i].BuildNumber,
             AssemblyRef.records[i].RevisionNumber);
         if (AssemblyRef.records[i].PublicKeyOrToken != 0)
         {
             byte[] keyOrToken = GetBlobCopy(AssemblyRef.records[i].PublicKeyOrToken);
             const int PublicKey = 0x0001;
             if ((AssemblyRef.records[i].Flags & PublicKey) != 0)
             {
                 name.SetPublicKey(keyOrToken);
             }
             else
             {
                 name.SetPublicKeyToken(keyOrToken);
             }
         }
         else
         {
             name.SetPublicKeyToken(Empty<byte>.Array);
         }
         if (AssemblyRef.records[i].Culture != 0)
         {
             name.Culture = GetString(AssemblyRef.records[i].Culture);
         }
         else
         {
             name.Culture = "";
         }
         if (AssemblyRef.records[i].HashValue != 0)
         {
             name.hash = GetBlobCopy(AssemblyRef.records[i].HashValue);
         }
         name.RawFlags = (AssemblyNameFlags)AssemblyRef.records[i].Flags;
         list.Add(name);
     }
     return list.ToArray();
 }
コード例 #37
0
ファイル: test.cs プロジェクト: mono/gert
	static void Main ()
	{
		string basedir = AppDomain.CurrentDomain.BaseDirectory;

		AssemblyDefinition assembly;
		Assembly a;
		AssemblyName an;
		AssemblyBuilder ab;

		assembly = AssemblyFactory.GetAssembly (Path.Combine (basedir, "libA.dll"));
		Assert.AreEqual (AssemblyFlags.PublicKey, assembly.Name.Flags, "#A1");

		a = Assembly.LoadFrom (Path.Combine (basedir, "libA.dll"));
		Assert.AreEqual (AssemblyNameFlags.PublicKey, a.GetName ().Flags, "#A2");

		assembly = AssemblyFactory.GetAssembly (Path.Combine (basedir, "libB.dll"));
#if ONLY_1_0
		Assert.AreEqual (AssemblyFlags.PublicKey, assembly.Name.Flags, "#B1");
#elif NET_2_0
		Assert.AreEqual (AssemblyFlags.PublicKey | AssemblyFlags.DisableJITcompileOptimizer, assembly.Name.Flags, "#B1");
#else
		Assert.AreEqual (AssemblyFlags.PublicKey | AssemblyFlags.Retargetable, assembly.Name.Flags, "#B1");
#endif

		a = Assembly.LoadFrom (Path.Combine (basedir, "libB.dll"));
#if ONLY_1_0
		Assert.AreEqual (AssemblyNameFlags.PublicKey, a.GetName ().Flags, "#B2");
#elif NET_2_0
		Assert.AreEqual (AssemblyNameFlags.PublicKey | AssemblyNameFlags.EnableJITcompileOptimizer, a.GetName ().Flags, "#B2");
#else
		Assert.AreEqual (AssemblyNameFlags.PublicKey | AssemblyNameFlags.Retargetable, a.GetName ().Flags, "#B2");
#endif

		assembly = AssemblyFactory.GetAssembly (Path.Combine (basedir, "libC.dll"));
#if NET_2_0
		Assert.AreEqual (AssemblyFlags.SideBySideCompatible, assembly.Name.Flags, "#C1");
#else
		Assert.AreEqual (AssemblyFlags.PublicKey, assembly.Name.Flags, "#C1");
#endif

		a = Assembly.LoadFrom (Path.Combine (basedir, "libC.dll"));
		Assert.AreEqual (AssemblyNameFlags.PublicKey, a.GetName ().Flags, "#C2");

		assembly = AssemblyFactory.GetAssembly (Path.Combine (basedir, "libD.dll"));
		Assert.AreEqual (AssemblyFlags.PublicKey, assembly.Name.Flags, "#D1");

		a = Assembly.LoadFrom (Path.Combine (basedir, "libD.dll"));
		Assert.AreEqual (AssemblyNameFlags.PublicKey, a.GetName ().Flags, "#D2");

		assembly = AssemblyFactory.GetAssembly (Path.Combine (basedir, "test.exe"));
		Assert.AreEqual (AssemblyFlags.SideBySideCompatible, assembly.Name.Flags, "#E1");

		a = Assembly.LoadFrom (Path.Combine (basedir, "test.exe"));
		Assert.AreEqual (AssemblyNameFlags.PublicKey, a.GetName ().Flags, "#E2");

		an = new AssemblyName ();
		an.Name = "libE";
		an.SetPublicKey (publicKey);
#if ONLY_1_0
		an.Flags = AssemblyNameFlags.None;
#elif NET_2_0
		an.Flags = AssemblyNameFlags.EnableJITcompileOptimizer;
#else
		an.Flags = AssemblyNameFlags.Retargetable;
#endif

		ab = AppDomain.CurrentDomain.DefineDynamicAssembly (an,
			AssemblyBuilderAccess.Save, basedir);
		ab.Save ("libE.dll");

		assembly = AssemblyFactory.GetAssembly (Path.Combine (basedir, "libE.dll"));
#if ONLY_1_0
		Assert.AreEqual (AssemblyFlags.PublicKey, assembly.Name.Flags, "#E1");
#elif NET_2_0
		Assert.AreEqual (AssemblyFlags.PublicKey | AssemblyFlags.DisableJITcompileOptimizer, assembly.Name.Flags, "#E1");
#else
		Assert.AreEqual (AssemblyFlags.PublicKey | AssemblyFlags.Retargetable, assembly.Name.Flags, "#E1");
#endif

		an = new AssemblyName ();
		an.Name = "libF";
		an.KeyPair = new StrongNameKeyPair (keyPair);
#if ONLY_1_0
		an.Flags = AssemblyNameFlags.None;
#elif NET_2_0
		an.Flags = AssemblyNameFlags.EnableJITcompileOptimizer;
#else
		an.Flags = AssemblyNameFlags.Retargetable;
#endif

		ab = AppDomain.CurrentDomain.DefineDynamicAssembly (an,
			AssemblyBuilderAccess.Save, basedir);
		ab.Save ("libF.dll");

		assembly = AssemblyFactory.GetAssembly (Path.Combine (basedir, "libF.dll"));
#if ONLY_1_0
		Assert.AreEqual (AssemblyFlags.PublicKey, assembly.Name.Flags, "#F1");
#elif NET_2_0
		Assert.AreEqual (AssemblyFlags.PublicKey | AssemblyFlags.DisableJITcompileOptimizer, assembly.Name.Flags, "#F1");
#else
		Assert.AreEqual (AssemblyFlags.PublicKey | AssemblyFlags.Retargetable, assembly.Name.Flags, "#F1");
#endif

		a = Assembly.LoadFrom (Path.Combine (basedir, "libF.dll"));
#if ONLY_1_0
		Assert.AreEqual (AssemblyNameFlags.PublicKey, a.GetName ().Flags, "#F2");
#elif NET_2_0
		Assert.AreEqual (AssemblyNameFlags.PublicKey | AssemblyNameFlags.EnableJITcompileOptimizer, a.GetName ().Flags, "#F2");
#else
		Assert.AreEqual (AssemblyNameFlags.PublicKey | AssemblyNameFlags.Retargetable, a.GetName ().Flags, "#F2");
#endif

		an = new AssemblyName ();
		an.Name = "libF";
		an.KeyPair = new StrongNameKeyPair (keyPair);
#if ONLY_1_0
		an.Flags = AssemblyNameFlags.None;
#elif NET_2_0
		an.Flags = AssemblyNameFlags.EnableJITcompileOptimizer;
#else
		an.Flags = AssemblyNameFlags.Retargetable;
#endif

		ab = AppDomain.CurrentDomain.DefineDynamicAssembly (an,
			AssemblyBuilderAccess.Save, basedir);
		an.Flags = AssemblyNameFlags.None;
		ab.Save ("libG.dll");

		assembly = AssemblyFactory.GetAssembly (Path.Combine (basedir, "libG.dll"));
#if ONLY_1_0
		Assert.AreEqual (AssemblyFlags.PublicKey, assembly.Name.Flags, "#G1");
#elif NET_2_0
		Assert.AreEqual (AssemblyFlags.PublicKey | AssemblyFlags.DisableJITcompileOptimizer, assembly.Name.Flags, "#G1");
#else
		Assert.AreEqual (AssemblyFlags.PublicKey | AssemblyFlags.Retargetable, assembly.Name.Flags, "#G1");
#endif

		a = Assembly.LoadFrom (Path.Combine (basedir, "libG.dll"));
#if ONLY_1_0
		Assert.AreEqual (AssemblyNameFlags.PublicKey, a.GetName ().Flags, "#G2");
#elif NET_2_0
		Assert.AreEqual (AssemblyNameFlags.PublicKey | AssemblyNameFlags.EnableJITcompileOptimizer, a.GetName ().Flags, "#G2");
#else
		Assert.AreEqual (AssemblyNameFlags.PublicKey | AssemblyNameFlags.Retargetable, a.GetName ().Flags, "#G2");
#endif
	}
コード例 #38
0
ファイル: Al.cs プロジェクト: razzfazz/mono
		// copied from /mcs/mcs/codegen.cs
		private void SetPublicKey (AssemblyName an, byte[] strongNameBlob) 
		{
			// check for possible ECMA key
			if (strongNameBlob.Length == 16) {
				// will be rejected if not "the" ECMA key
				an.SetPublicKey (strongNameBlob);
			} else {
				// take it, with or without, a private key
				RSA rsa = CryptoConvert.FromCapiKeyBlob (strongNameBlob);
				// and make sure we only feed the public part to Sys.Ref
				byte[] publickey = CryptoConvert.ToCapiPublicKeyBlob (rsa);
					
				// AssemblyName.SetPublicKey requires an additional header
				byte[] publicKeyHeader = new byte [12] { 0x00, 0x24, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00 };

				byte[] encodedPublicKey = new byte [12 + publickey.Length];
				Buffer.BlockCopy (publicKeyHeader, 0, encodedPublicKey, 0, 12);
				Buffer.BlockCopy (publickey, 0, encodedPublicKey, 12, publickey.Length);
				an.SetPublicKey (encodedPublicKey);
			}
		}
コード例 #39
0
ファイル: AssemblyBuilder.cs プロジェクト: Semogj/ikvm-fork
		public override AssemblyName GetName()
		{
			AssemblyName n = new AssemblyName();
			n.Name = name;
			n.Version = new Version(majorVersion, minorVersion, buildVersion, revisionVersion);
			n.Culture = culture ?? "";
			n.HashAlgorithm = hashAlgorithm;
			n.RawFlags = flags;
			n.SetPublicKey(publicKey != null ? (byte[])publicKey.Clone() : Empty<byte>.Array);
			n.KeyPair = keyPair;
			return n;
		}
コード例 #40
0
ファイル: ModuleReader.cs プロジェクト: koush/mono
		public override AssemblyName[] __GetReferencedAssemblies()
		{
			List<AssemblyName> list = new List<AssemblyName>();
			for (int i = 0; i < AssemblyRef.records.Length; i++)
			{
				AssemblyName name = new AssemblyName();
				name.Name = GetString(AssemblyRef.records[i].Name);
				name.Version = new Version(
					AssemblyRef.records[i].MajorVersion,
					AssemblyRef.records[i].MinorVersion,
					AssemblyRef.records[i].BuildNumber,
					AssemblyRef.records[i].RevisionNumber);
				if (AssemblyRef.records[i].PublicKeyOrToken != 0)
				{
					byte[] keyOrToken = GetBlobCopy(AssemblyRef.records[i].PublicKeyOrToken);
					const int PublicKey = 0x0001;
					if ((AssemblyRef.records[i].Flags & PublicKey) != 0)
					{
						name.SetPublicKey(keyOrToken);
					}
					else
					{
						name.SetPublicKeyToken(keyOrToken);
					}
				}
				if (AssemblyRef.records[i].Culture != 0)
				{
					name.CultureInfo = new System.Globalization.CultureInfo(GetString(AssemblyRef.records[i].Culture));
				}
				else
				{
					name.CultureInfo = System.Globalization.CultureInfo.InvariantCulture;
				}
				name.Flags = (AssemblyNameFlags)AssemblyRef.records[i].Flags;
				list.Add(name);
			}
			return list.ToArray();
		}
コード例 #41
0
ファイル: AssemblyNameTests.cs プロジェクト: dotnet/corefx
 public void SetPublicKey_GetPublicKey(byte[] publicKey)
 {
     AssemblyName assemblyName = new AssemblyName();
     assemblyName.SetPublicKey(publicKey);
     Assert.Equal(publicKey, assemblyName.GetPublicKey());
 }
コード例 #42
0
ファイル: testa.cs プロジェクト: mono/gert
	static int Main () {
		if (!Directory.Exists (tempDir)) {
			Directory.CreateDirectory (tempDir);
		}

		string assemblyFile = Path.Combine (tempDir, "bug79522A.dll");
		AssemblyName aname = new AssemblyName ();
		aname.Name = "bug79522A";
		aname.Version = new Version (2, 4);

		GenerateAssembly (aname, assemblyFile);

		aname = new AssemblyName ();
		aname.CodeBase = assemblyFile;
		aname.Name = "whateveryouwant";
		aname.Version = new Version (1, 1);

		// despite the fact that no assembly with the specified name
		// exists, the assembly pointed to by the CodeBase of the
		// AssemblyName will be loaded
		//
		// however the display name of the loaded assembly does not
		// match the display name of the AssemblyName, and as a result
		// a FileLoadException is thrown
		try {
			AppDomain.CurrentDomain.Load (aname);
			Assert.Fail ("#A1");
		} catch (FileLoadException) {
		}

		// if we set CodeBase to some garbage, then we'll get a
		// FileNotFoundException instead
		aname.CodeBase = "whatever";
		try {
			AppDomain.CurrentDomain.Load (aname);
			Assert.Fail ("#A2");
		} catch (FileNotFoundException) {
		}

		aname = new AssemblyName ();
		aname.Name = "bug79522A";
		aname.CodeBase = assemblyFile;
#if NET_2_0
		AppDomain.CurrentDomain.Load (aname);
#else
		try {
			AppDomain.CurrentDomain.Load (aname);
			Assert.Fail ("#A3");
		} catch (FileLoadException) {
		}
#endif

		aname = new AssemblyName ();
		aname.Name = "bug79522A";
		aname.CodeBase = assemblyFile;
		aname.Version = new Version (2, 5);
#if NET_2_0
		// the version number is not considered when comparing the manifest
		// of the assembly found using codebase
		AppDomain.CurrentDomain.Load (aname);
#else
		try {
			AppDomain.CurrentDomain.Load (aname);
			Assert.Fail ("#A4");
		} catch (FileLoadException) {
		}
#endif

		aname = new AssemblyName ();
		aname.Name = "bug79522A";
		aname.CodeBase = assemblyFile;
		aname.Version = new Version (2, 4, 1);
#if NET_2_0
		// the version number is not considered when comparing the manifest
		// of the assembly found using codebase
		AppDomain.CurrentDomain.Load (aname);
#else
		try {
			AppDomain.CurrentDomain.Load (aname);
			Assert.Fail ("#A5");
		} catch (FileLoadException) {
		}
#endif

		// set only the version
		aname = new AssemblyName ();
		aname.Name = "bug79522A";
		aname.CodeBase = assemblyFile;
		aname.Version = new Version (2, 4);
#if NET_2_0
		AppDomain.CurrentDomain.Load (aname);
#else
		try {
			// culture is not set
			AppDomain.CurrentDomain.Load (aname);
			Assert.Fail ("#A6");
		} catch (FileLoadException) {
		}
#endif

		// if both culture and version are set, then the version diff
		// is ignored
		aname = new AssemblyName ();
		aname.Name = "bug79522A";
		aname.CodeBase = assemblyFile;
		aname.CultureInfo = CultureInfo.InvariantCulture;
		aname.Version = new Version (2, 5);
		AppDomain.CurrentDomain.Load (aname);

		// loaded assembly is not signed
		aname = new AssemblyName ();
		aname.Name = "bug79522A";
		aname.CodeBase = assemblyFile;
		aname.CultureInfo = CultureInfo.InvariantCulture;
		aname.SetPublicKey (publicKey);
		try {
			AppDomain.CurrentDomain.Load (aname);
			Assert.Fail ("#A7");
		} catch (FileLoadException) {
		}

		// if set, the culture must match
		aname = new AssemblyName ();
		aname.Name = "bug79522A";
		aname.CodeBase = assemblyFile;
		aname.Version = new Version (2, 4);
		aname.CultureInfo = new CultureInfo ("en-US");
		try {
			AppDomain.CurrentDomain.Load (aname);
			Assert.Fail ("#A8");
		} catch (FileLoadException) {
		}

		aname = new AssemblyName ();
		aname.Name = "bug79522A";
		aname.CodeBase = assemblyFile;
		aname.CultureInfo = CultureInfo.InvariantCulture;
		AppDomain.CurrentDomain.Load (aname);

		// PART B

		assemblyFile = Path.Combine (tempDir, "bug79522B.dll");
		aname = new AssemblyName ();
		aname.Name = "bug79522B";
		aname.CultureInfo = new CultureInfo ("nl-BE");
		aname.Version = new Version (2, 4, 1);

		GenerateAssembly (aname, assemblyFile);

		aname = new AssemblyName ();
		aname.CodeBase = assemblyFile;
		aname.Name = "whateveryouwant";
		aname.CultureInfo = new CultureInfo ("nl-BE");
		aname.Version = new Version (1, 1);

		// despite the fact that no assembly with the specified name
		// exists, the assembly pointed to by the CodeBase of the
		// AssemblyName will be loaded
		//
		// however the display name of the loaded assembly does not
		// match the display name of the AssemblyName, and as a result
		// a FileLoadException is thrown
		try {
			AppDomain.CurrentDomain.Load (aname);
			Assert.Fail ("#B1");
		} catch (FileLoadException) {
		}

		// if we set CodeBase to some garbage, then we'll get a
		// FileNotFoundException instead
		aname.CodeBase = "whatever";
		try {
			AppDomain.CurrentDomain.Load (aname);
			Assert.Fail ("#B2");
		} catch (FileNotFoundException) {
		}

		aname = new AssemblyName ();
		aname.Name = "bug79522B";
		aname.CodeBase = assemblyFile;
#if NET_2_0
		AppDomain.CurrentDomain.Load (aname);
#else
		try {
			AppDomain.CurrentDomain.Load (aname);
			Assert.Fail ("#B3");
		} catch (FileLoadException) {
		}
#endif

		aname = new AssemblyName ();
		aname.Name = "bug79522B";
		aname.CodeBase = assemblyFile;
		aname.Version = new Version (5, 5);
#if NET_2_0
		// the version number is not considered when comparing the manifest
		// of the assembly found using codebase
		AppDomain.CurrentDomain.Load (aname);
#else
		try {
			AppDomain.CurrentDomain.Load (aname);
			Assert.Fail ("#B4");
		} catch (FileLoadException) {
		}
#endif

		aname = new AssemblyName ();
		aname.Name = "bug79522B";
		aname.CodeBase = assemblyFile;
		aname.Version = new Version (2, 4);
#if NET_2_0
		AppDomain.CurrentDomain.Load (aname);
#else
		// when the loaded assembly has a specific culture, then that
		// culture must be set if you set the Version on the aname
		try {
			AppDomain.CurrentDomain.Load (aname);
			Assert.Fail ("#B5");
		} catch (FileLoadException) {
		}
#endif

		// if both culture and version are set, then the version diff
		// is ignored
		aname = new AssemblyName ();
		aname.Name = "bug79522B";
		aname.CodeBase = assemblyFile;
		aname.CultureInfo = new CultureInfo ("nl-BE");
		aname.Version = new Version (6, 5);
		AppDomain.CurrentDomain.Load (aname);

		// loaded assembly is not signed
		aname = new AssemblyName ();
		aname.Name = "bug79522B";
		aname.CodeBase = assemblyFile;
		aname.CultureInfo = new CultureInfo ("nl-BE");
		aname.SetPublicKey (publicKey);
		try {
			AppDomain.CurrentDomain.Load (aname);
			Assert.Fail ("#B6");
		} catch (FileLoadException) {
		}

		// if set, the culture must match
		aname = new AssemblyName ();
		aname.Name = "bug79522B";
		aname.CodeBase = assemblyFile;
		aname.Version = new Version (6, 5);
		aname.CultureInfo = new CultureInfo ("en-US");
		try {
			AppDomain.CurrentDomain.Load (aname);
			Assert.Fail ("#B7");
		} catch (FileLoadException) {
		}

		// PART C

		assemblyFile = Path.Combine (tempDir, "bug79522C.dll");
		aname = new AssemblyName ();
		aname.Name = "bug79522C";
		aname.CultureInfo = new CultureInfo ("nl-BE");
		aname.Version = new Version (2, 4);
		aname.KeyPair = new StrongNameKeyPair (keyPair);

		GenerateAssembly (aname, assemblyFile);

		aname = new AssemblyName ();
		aname.CodeBase = assemblyFile;
		aname.Name = "whateveryouwant";
		aname.CultureInfo = new CultureInfo ("nl-BE");
		aname.Version = new Version (1, 1);
		aname.SetPublicKey (publicKey);

		// despite the fact that no assembly with the specified name
		// exists, the assembly pointed to by the CodeBase of the
		// AssemblyName will be loaded
		//
		// however the display name of the loaded assembly does not
		// match the display name of the AssemblyName, and as a result
		// a FileLoadException is thrown
		try {
			AppDomain.CurrentDomain.Load (aname);
			Assert.Fail ("#C1");
		} catch (FileLoadException) {
		}

		// if we set CodeBase to some garbage, then we'll get a
		// FileNotFoundException instead
		aname.CodeBase = "whatever";
		try {
			AppDomain.CurrentDomain.Load (aname);
			Assert.Fail ("#C2");
		} catch (FileNotFoundException) {
		}

		aname = new AssemblyName ();
		aname.Name = "bug79522C";
		aname.CodeBase = assemblyFile;
#if NET_2_0
		AppDomain.CurrentDomain.Load (aname);
#else
		try {
			AppDomain.CurrentDomain.Load (aname);
			Assert.Fail ("#C3");
		} catch (FileLoadException) {
		}
#endif

		aname = new AssemblyName ();
		aname.Name = "bug79522C";
		aname.CodeBase = assemblyFile;
		aname.Version = new Version (5, 5);
		try {
			AppDomain.CurrentDomain.Load (aname);
			Assert.Fail ("#C4");
		} catch (FileLoadException) {
		}

		aname = new AssemblyName ();
		aname.Name = "bug79522C";
		aname.CodeBase = assemblyFile;
		aname.Version = new Version (2, 4);
#if NET_2_0
		AppDomain.CurrentDomain.Load (aname);
#else
		// when the loaded assembly has a specific culture/publickey,
		// then that culture/publickey must be set if you set the
		// Version on the aname
		try {
			AppDomain.CurrentDomain.Load (aname);
			Assert.Fail ("#C5");
		} catch (FileLoadException) {
		}
#endif

		aname = new AssemblyName ();
		aname.Name = "bug79522C";
		aname.CodeBase = assemblyFile;
		aname.CultureInfo = new CultureInfo ("nl-BE");
		aname.Version = new Version (2, 4);
#if NET_2_0
		AppDomain.CurrentDomain.Load (aname);
#else
		// if loaded assembly is signed, then the public key must be set
		try {
			AppDomain.CurrentDomain.Load (aname);
			Assert.Fail ("#C6");
		} catch (FileLoadException) {
		}
#endif

		// if public key is set, then version must be set
		aname = new AssemblyName ();
		aname.Name = "bug79522C";
		aname.CodeBase = assemblyFile;
		aname.CultureInfo = new CultureInfo ("nl-BE");
		aname.SetPublicKey (publicKey);
#if NET_2_0
		AppDomain.CurrentDomain.Load (aname);
#else
		try {
			AppDomain.CurrentDomain.Load (aname);
			Assert.Fail ("#C7");
		} catch (FileLoadException) {
		}
#endif

		// if culture and version are set, then the version must match
		aname = new AssemblyName ();
		aname.Name = "bug79522C";
		aname.CodeBase = assemblyFile;
		aname.CultureInfo = new CultureInfo ("nl-BE");
		aname.SetPublicKey (publicKey);
		aname.Version = new Version (5, 6);
		try {
			AppDomain.CurrentDomain.Load (aname);
			Assert.Fail ("#C8");
		} catch (FileLoadException) {
		}

		// publickey must match
		aname = new AssemblyName ();
		aname.Name = "bug79522C";
		aname.CodeBase = assemblyFile;
		aname.CultureInfo = new CultureInfo ("nl-BE");
		aname.Version = new Version (2, 4);
		aname.SetPublicKey (publicKey2);
		try {
			AppDomain.CurrentDomain.Load (aname);
			Assert.Fail ("#C9");
#if NET_2_0
		} catch (SecurityException) {
			// Invalid assembly public key
		}
#else
		} catch (FileLoadException) {
コード例 #43
0
ファイル: test-695.cs プロジェクト: Profit0004/mono
	public static int Main ()
	{
		string basedir = BaseDirectory;

		AssemblyDefinition assembly;
		Assembly a;
		AssemblyName an;
		AssemblyBuilder ab;

		assembly = AssemblyDefinition.ReadAssembly (Path.Combine (basedir, "test-695-2-lib.dll"));
		if (assembly.Name.Attributes != AssemblyAttributes.PublicKey)
			return 1;
		a = Assembly.LoadFrom (Path.Combine (basedir, "test-695-2-lib.dll"));
		if (a.GetName ().Flags != AssemblyNameFlags.PublicKey)
			return 2;

		assembly = AssemblyDefinition.ReadAssembly (Path.Combine (basedir, "test-695-3-lib.dll"));
		if (Environment.Version.Major >= 2) {
			if (assembly.Name.Attributes != AssemblyAttributes.SideBySideCompatible)
				return 3;

		} else {
			if (assembly.Name.Attributes != AssemblyAttributes.PublicKey)
				return 3;
		}
		a = Assembly.LoadFrom (Path.Combine (basedir, "test-695-3-lib.dll"));
		if (a.GetName ().Flags != AssemblyNameFlags.PublicKey)
			return 4;

		assembly = AssemblyDefinition.ReadAssembly (Path.Combine (basedir, "test-695.exe"));
		if (assembly.Name.Attributes != AssemblyAttributes.SideBySideCompatible)
			return 5;
		a = Assembly.LoadFrom (Path.Combine (basedir, "test-695.exe"));
		if (a.GetName ().Flags != AssemblyNameFlags.PublicKey)
			return 6;

		an = new AssemblyName ();
		an.Name = "test-695-4-lib";
		an.SetPublicKey (publicKey);
		an.Flags = AssemblyNameFlags.Retargetable;

		ab = AppDomain.CurrentDomain.DefineDynamicAssembly (an,
			AssemblyBuilderAccess.Save, basedir);
		ab.Save ("test-695-4-lib.dll");

		assembly = AssemblyDefinition.ReadAssembly (Path.Combine (basedir, "test-695-4-lib.dll"));
		if (assembly.Name.Attributes != (AssemblyAttributes.PublicKey | AssemblyAttributes.Retargetable))
			return 7;

		an = new AssemblyName ();
		an.Name = "test-695-5-lib";
		an.KeyPair = new StrongNameKeyPair (keyPair);
		an.Flags = AssemblyNameFlags.Retargetable;

		ab = AppDomain.CurrentDomain.DefineDynamicAssembly (an,
			AssemblyBuilderAccess.Save, basedir);
		ab.Save ("test-695-5-lib.dll");

		assembly = AssemblyDefinition.ReadAssembly (Path.Combine (basedir, "test-695-5-lib.dll"));
		if (assembly.Name.Attributes != (AssemblyAttributes.PublicKey | AssemblyAttributes.Retargetable))
			return 8;
		a = Assembly.LoadFrom (Path.Combine (basedir, "test-695-5-lib.dll"));
		if (a.GetName ().Flags != (AssemblyNameFlags.PublicKey | AssemblyNameFlags.Retargetable))
			return 9;

		an = new AssemblyName ();
		an.Name = "test-695-6-lib";
		an.KeyPair = new StrongNameKeyPair (keyPair);
		an.Flags = AssemblyNameFlags.Retargetable;

		ab = AppDomain.CurrentDomain.DefineDynamicAssembly (an,
			AssemblyBuilderAccess.Save, basedir);
		an.Flags = AssemblyNameFlags.None;
		ab.Save ("test-695-6-lib.dll");

		assembly = AssemblyDefinition.ReadAssembly (Path.Combine (basedir, "test-695-6-lib.dll"));
		if (assembly.Name.Attributes != (AssemblyAttributes.PublicKey | AssemblyAttributes.Retargetable))
			return 10;
		a = Assembly.LoadFrom (Path.Combine (basedir, "test-695-6-lib.dll"));
		if (a.GetName ().Flags != (AssemblyNameFlags.PublicKey | AssemblyNameFlags.Retargetable))
			return 11;

		return 0;
	}