internal void AddAssembly(Int16 assemblyId, string assemblyName) { if (assemblyId < 0) { throw new ArgumentOutOfRangeException("assemblyId"); } if (assemblyName == null) { throw new ArgumentNullException("assemblyName"); } lock (_bamlAssembly) { if (assemblyId == _bamlAssembly.Count) { BamlAssembly assembly = new BamlAssembly(assemblyName); _bamlAssembly.Add(assembly); } else if (assemblyId > _bamlAssembly.Count) { throw new ArgumentOutOfRangeException("assemblyId", SR.Get(SRID.AssemblyIdOutOfSequence, assemblyId)); } } // Duplicate IDs (assemblyId < _bamlAssembly.Count) are ignored }
private Assembly ResolveAssembly(BamlAssembly bamlAssembly) { if (bamlAssembly.Assembly != null) { return(bamlAssembly.Assembly); } AssemblyName assemblyName = new AssemblyName(bamlAssembly.Name); bamlAssembly.Assembly = MS.Internal.WindowsBase.SafeSecurityHelper.GetLoadedAssembly(assemblyName); if (bamlAssembly.Assembly == null) { byte[] publicKeyToken = assemblyName.GetPublicKeyToken(); if (assemblyName.Version != null || assemblyName.CultureInfo != null || publicKeyToken != null) { try { bamlAssembly.Assembly = Assembly.Load(assemblyName.FullName); } catch { // Fall back to short name match. if (bamlAssembly.Assembly == null) { // First try to match the local assembly (which may be in the LoadFrom/LoadFile context) if (MatchesLocalAssembly(assemblyName.Name, publicKeyToken)) { bamlAssembly.Assembly = _localAssembly; } // Otherwise try Assembly.Load else { AssemblyName shortName = new AssemblyName(assemblyName.Name); if (publicKeyToken != null) { shortName.SetPublicKeyToken(publicKeyToken); } bamlAssembly.Assembly = Assembly.Load(shortName); } } } } else { // Only a short name was provided. // Don't need to check for local assembly match, because if it matched the local // assembly, we would have caught it in GetLoadedAssembly up above. bamlAssembly.Assembly = Assembly.LoadWithPartialName(assemblyName.Name); } } return(bamlAssembly.Assembly); }
private bool TryGetBamlAssembly(Int16 assemblyId, out BamlAssembly bamlAssembly) { lock (_syncObject) { if (assemblyId >= 0 && assemblyId < _bamlAssembly.Count) { bamlAssembly = _bamlAssembly[assemblyId]; return(true); } } Assembly assembly = KnownTypes.GetKnownAssembly(assemblyId); if (assembly != null) { bamlAssembly = new BamlAssembly(assembly); return(true); } bamlAssembly = null; return(false); }
private bool TryGetBamlAssembly(Int16 assemblyId, out BamlAssembly bamlAssembly) { lock (_syncObject) { if (assemblyId >= 0 && assemblyId < _bamlAssembly.Count) { bamlAssembly = _bamlAssembly[assemblyId]; return true; } } Assembly assembly = KnownTypes.GetKnownAssembly(assemblyId); if (assembly != null) { bamlAssembly = new BamlAssembly(assembly); return true; } bamlAssembly = null; return false; }
private Assembly ResolveAssembly(BamlAssembly bamlAssembly) { if (bamlAssembly.Assembly != null) { return bamlAssembly.Assembly; } AssemblyName assemblyName = new AssemblyName(bamlAssembly.Name); bamlAssembly.Assembly = MS.Internal.WindowsBase.SafeSecurityHelper.GetLoadedAssembly(assemblyName); if (bamlAssembly.Assembly == null) { byte[] publicKeyToken = assemblyName.GetPublicKeyToken(); if (assemblyName.Version != null || assemblyName.CultureInfo != null || publicKeyToken != null) { try { bamlAssembly.Assembly = Assembly.Load(assemblyName.FullName); } catch { // Fall back to short name match. if (bamlAssembly.Assembly == null) { // First try to match the local assembly (which may be in the LoadFrom/LoadFile context) if (MatchesLocalAssembly(assemblyName.Name, publicKeyToken)) { bamlAssembly.Assembly = _localAssembly; } // Otherwise try Assembly.Load else { AssemblyName shortName = new AssemblyName(assemblyName.Name); if (publicKeyToken != null) { shortName.SetPublicKeyToken(publicKeyToken); } bamlAssembly.Assembly = Assembly.Load(shortName); } } } } else { // Only a short name was provided. // Don't need to check for local assembly match, because if it matched the local // assembly, we would have caught it in GetLoadedAssembly up above. bamlAssembly.Assembly = Assembly.LoadWithPartialName(assemblyName.Name); } } return bamlAssembly.Assembly; }
public BamlAssembly[] GetReferencedAssemblies(BamlAssembly asm) { AssemblyName[] list = asm.Assembly.GetReferencedAssemblies(); return (from an in list select this.LoadAssembly(an)).ToArray(); }