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; }
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; }
/// <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); }
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); }
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)); }
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)); }
public void SetPublicKey_GetPublicKey(byte[] publicKey) { AssemblyName assemblyName = new AssemblyName(); assemblyName.SetPublicKey(publicKey); Assert.Equal(publicKey, assemblyName.GetPublicKey()); }
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); }
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); } }
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); }
// 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); }
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); }
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); }
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); }
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)); } }
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"); }
public DynamicAssembly(string moduleName) { var assemblyName = new AssemblyName(moduleName); assemblyName.SetPublicKey(PublicKey); this.assemblyBuilder = AssemblyBuilder.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run); this.moduleBuilder = assemblyBuilder.DefineDynamicModule(moduleName); }
/// <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); }
/// <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)); }
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)); }
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"); }
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"); }
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)); }
internal override AssemblyName UnprotectedGetName() { AssemblyName an = base.UnprotectedGetName(); if (sn != null) { an.SetPublicKey(sn.PublicKey); } return(an); }
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); }
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()); }
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)); }
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")); }
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")); }
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"); }
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 }
/// <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)); }
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"); }
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; }
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; }
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(); }
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 }
// 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); } }
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; }
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(); }
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) {
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; }