public string GetFilePath(IAssemblyDescriptor descriptor) { return(Path.Combine(DirectoryPath, descriptor.Name, FolderPrefix + descriptor.Version + "__" + descriptor.PublicKeyToken.ToHexString(), descriptor.Name + ".dll")); }
public static void ValidateAssembly(IAssemblyDescriptor originalDescriptor, IAssemblyDescriptor descriptor) { Assert.Equal(originalDescriptor.Name, descriptor.Name); Assert.Equal(originalDescriptor.Culture, descriptor.Culture); Assert.Equal(originalDescriptor.Version, descriptor.Version); Assert.Equal(originalDescriptor.PublicKeyToken, descriptor.PublicKeyToken); }
public AssemblyDefinition ResolveAssembly(IAssemblyDescriptor descriptor) { if (_cachedAssemblies.TryGetValue(descriptor, out var definition)) { return(definition); } var path = GetFilePath(descriptor); if (!string.IsNullOrEmpty(path)) { var assembly = ReadAssembly(path); if (assembly.NetDirectory?.MetadataHeader?.Image != null) { definition = assembly.NetDirectory.MetadataHeader.Image.Assembly; _cachedAssemblies.Add(descriptor, definition); return(definition); } } definition = OnAssemblyResolutionFailed(new AssemblyResolutionEventArgs(descriptor)); if (definition == null) { if (ThrowOnNotFound) { throw new AssemblyResolutionException(descriptor); } } else { _cachedAssemblies.Add(descriptor, definition); } return(definition); }
public static void ValidateAssembly(IAssemblyDescriptor originalDescriptor, IAssemblyDescriptor descriptor) { Assert.AreEqual(originalDescriptor.Name, descriptor.Name); Assert.AreEqual(originalDescriptor.Culture, descriptor.Culture); Assert.AreEqual(originalDescriptor.Version, descriptor.Version); ValidateByteArrays(originalDescriptor.PublicKeyToken, descriptor.PublicKeyToken); }
public static void ImportAssemblyInfo(this AssemblyDefinition assembly, IAssemblyDescriptor info) { assembly.Name = info.Name; assembly.Version = info.Version; assembly.Culture = info.Culture; assembly.PublicKey = info.PublicKeyToken != null ? new DataBlobSignature(info.PublicKeyToken) : null; }
/// <summary> /// Gets the file path to the assembly file that was described by the given assembly descriptor. /// </summary> /// <param name="descriptor">The assembly to resolve.</param> /// <returns>The path to the assembly file.</returns> protected virtual string GetFilePath(IAssemblyDescriptor descriptor) { if (descriptor.PublicKeyToken != null) { foreach (var gacDirectory in GacDirectories) { var filePath = gacDirectory.GetFilePath(descriptor); if (File.Exists(filePath)) { return(filePath); } } } foreach (var directory in SearchDirectories) { var path = Path.Combine(directory, descriptor.Name); if (File.Exists(path + ".dll")) { return(path + ".dll"); } if (File.Exists(path + ".dll")) { return(path + ".dll"); } } return(null); }
public AssemblyResolutionEventArgs(IAssemblyDescriptor requestedAssembly, Exception exception) { if (requestedAssembly == null) throw new ArgumentNullException("requestedAssembly"); RequestedAssembly = requestedAssembly; Exception = exception; }
public AssemblyReference ImportAssembly(IAssemblyDescriptor assemblyInfo) { var table = _tableStreamBuffer.GetTable<AssemblyReference>(); var reference = table.FirstOrDefault(x => _signatureComparer.MatchAssemblies(x, assemblyInfo)); if (reference == null) table.Add(reference = new AssemblyReference(assemblyInfo)); return reference; }
public AssemblyResolutionEventArgs(IAssemblyDescriptor requestedAssembly) { if (requestedAssembly == null) { throw new ArgumentNullException("requestedAssembly"); } RequestedAssembly = requestedAssembly; }
public AssemblyDefinition(IAssemblyDescriptor info) : base( null, new MetadataToken(MetadataTokenType.Assembly), new MetadataRow <uint, ushort, ushort, ushort, ushort, uint, uint, uint, uint>()) { _name = new LazyValue <string>(info.Name); Version = info.Version; _culture = new LazyValue <string>(info.Culture); _publicKey = new LazyValue <DataBlobSignature>(info.PublicKeyToken == null ? null : new DataBlobSignature(info.PublicKeyToken)); }
public AssemblyReference ImportAssembly(IAssemblyDescriptor assemblyInfo) { var table = _tableStreamBuffer.GetTable <AssemblyReference>(); var reference = table.FirstOrDefault(x => _signatureComparer.MatchAssemblies(x, assemblyInfo)); if (reference == null) { table.Add(reference = new AssemblyReference(assemblyInfo)); } return(reference); }
/// <summary> /// Determines whether two assembly descriptors are considered equal according to their signature. /// </summary> /// <param name="info1">The first assembly to compare.</param> /// <param name="info2">The second assembly to compare.</param> /// <returns><c>True</c> if the assemblies are considered equal, <c>False</c> otherwise.</returns> public bool MatchAssemblies(IAssemblyDescriptor info1, IAssemblyDescriptor info2) { if (info1 == null && info2 == null) return true; if (info1 == null || info2 == null) return false; return info1.Name == info2.Name && info1.Version == info2.Version && info1.Culture == info2.Culture && ByteArrayMatches(info1.PublicKeyToken, info2.PublicKeyToken); }
/// <inheritdoc /> public virtual AssemblyReference ImportAssembly(IAssemblyDescriptor assemblyInfo) { var reference = TargetImage.Assembly.AssemblyReferences.FirstOrDefault(x => _signatureComparer.Equals(x, assemblyInfo)); if (reference == null) { reference = new AssemblyReference(assemblyInfo); TargetImage.Assembly.AssemblyReferences.Add(reference); } return(reference); }
public AssemblyReference(IAssemblyDescriptor info) : base(new MetadataToken(MetadataTokenType.AssemblyRef)) { _name = new LazyValue <string>(info.Name); Version = info.Version; _culture = new LazyValue <string>(info.Culture); _publicKey = new LazyValue <DataBlobSignature>(info.PublicKeyToken == null ? null : new DataBlobSignature(info.PublicKeyToken)); _hashValue = new LazyValue <DataBlobSignature>(); CustomAttributes = new CustomAttributeCollection(this); OperatingSystems = new DelegatedMemberCollection <AssemblyReference, AssemblyRefOs>(this, GetOsOwner, SetOsOwner); Processors = new DelegatedMemberCollection <AssemblyReference, AssemblyRefProcessor>(this, GetProcessorOwner, SetProcessorOwner); }
internal static string GetFullName(this IAssemblyDescriptor info) { var builder = new StringBuilder(); builder.Append(info.Name); builder.Append(", Version="); builder.Append(info.Version); builder.Append(", Culture="); builder.Append(string.IsNullOrEmpty(info.Culture) ? "neutral" : info.Culture); builder.Append(", PublicKeyToken="); builder.Append(info.PublicKeyToken != null ? info.PublicKeyToken.ToHexString() : "null"); return(builder.ToString()); }
public AssemblyDefinition(IAssemblyDescriptor info) : base(new MetadataToken(MetadataTokenType.Assembly)) { _name = new LazyValue <string>(info.Name); Version = info.Version; _culture = new LazyValue <string>(info.Culture); _publicKey = new LazyValue <DataBlobSignature>(info.PublicKeyToken == null ? null : new DataBlobSignature(info.PublicKeyToken)); Modules = new DelegatedMemberCollection <AssemblyDefinition, ModuleDefinition>(this, GetModuleOwner, SetModuleOwner); AssemblyReferences = new Collection <AssemblyReference>(); ModuleReferences = new Collection <ModuleReference>(); SecurityDeclarations = new SecurityDeclarationCollection(this); Resources = new Collection <ManifestResource>(); Files = new Collection <FileReference>(); OperatingSystems = new DelegatedMemberCollection <AssemblyDefinition, AssemblyOs>(this, GetOsOwner, SetOsOwner); Processors = new DelegatedMemberCollection <AssemblyDefinition, AssemblyProcessor>(this, GetProcessorOwner, SetProcessorOwner); }
/// <summary> /// Determines whether two assembly descriptors are considered equal according to their signature. /// </summary> /// <param name="info1">The first assembly to compare.</param> /// <param name="info2">The second assembly to compare.</param> /// <returns><c>True</c> if the assemblies are considered equal, <c>False</c> otherwise.</returns> public bool MatchAssemblies(IAssemblyDescriptor info1, IAssemblyDescriptor info2) { if (info1 == null && info2 == null) { return(true); } if (info1 == null || info2 == null) { return(false); } return(info1.Name == info2.Name && info1.Version == info2.Version && info1.Culture == info2.Culture && ByteArrayMatches(info1.PublicKeyToken, info2.PublicKeyToken)); }
public AssemblyDefinition ResolveAssembly(IAssemblyDescriptor descriptor) { AssemblyDefinition definition; if (_cachedAssemblies.TryGetValue(descriptor, out definition)) { return(definition); } var path = GetFilePath(descriptor); if (!string.IsNullOrEmpty(path)) { var assembly = ReadAssembly(path); if (assembly.NetDirectory != null && assembly.NetDirectory.MetadataHeader != null) { var tableStream = assembly.NetDirectory.MetadataHeader.GetStream <TableStream>(); if (tableStream != null) { var assemblyTable = tableStream.GetTable <AssemblyDefinition>(); if (assemblyTable.Count > 0) { definition = assemblyTable[0]; _cachedAssemblies.Add(descriptor, definition); return(definition); } } } } definition = OnAssemblyResolutionFailed(new AssemblyResolutionEventArgs(descriptor)); if (definition == null) { if (ThrowOnNotFound) { throw new AssemblyResolutionException(descriptor); } } else { _cachedAssemblies.Add(descriptor, definition); } return(definition); }
public AssemblyDefinition ResolveAssembly(IAssemblyDescriptor descriptor) { AssemblyDefinition definition; if (_cachedAssemblies.TryGetValue(descriptor, out definition)) return definition; var path = GetFilePath(descriptor); if (!string.IsNullOrEmpty(path)) { var assembly = ReadAssembly(path); if (assembly.NetDirectory != null && assembly.NetDirectory.MetadataHeader != null) { var tableStream = assembly.NetDirectory.MetadataHeader.GetStream<TableStream>(); if (tableStream != null) { var assemblyTable = tableStream.GetTable<AssemblyDefinition>(); if (assemblyTable.Count > 0) { definition = assemblyTable[0]; _cachedAssemblies.Add(descriptor, definition); return definition; } } } } definition = OnAssemblyResolutionFailed(new AssemblyResolutionEventArgs(descriptor)); if (definition == null) { if (ThrowOnNotFound) throw new AssemblyResolutionException(descriptor); } else { _cachedAssemblies.Add(descriptor, definition); } return definition; }
public AssemblyResolutionException(IAssemblyDescriptor info) : this(string.Format("Assembly {0} could not be resolved.", info.GetFullName())) { }
public string GetFilePath(IAssemblyDescriptor descriptor) { return Path.Combine(DirectoryPath, descriptor.Name, FolderPrefix + descriptor.Version + "__" + descriptor.PublicKeyToken.ToHexString(), descriptor.Name + ".dll"); }
/// <summary> /// Gets the file path to the assembly file that was described by the given assembly descriptor. /// </summary> /// <param name="descriptor">The assembly to resolve.</param> /// <returns>The path to the assembly file.</returns> protected virtual string GetFilePath(IAssemblyDescriptor descriptor) { if (descriptor.PublicKeyToken != null) { foreach (var gacDirectory in GacDirectories) { var filePath = gacDirectory.GetFilePath(descriptor); if (File.Exists(filePath)) return filePath; } } foreach (var directory in SearchDirectories) { var path = Path.Combine(directory, descriptor.Name); if (File.Exists(path + ".dll")) return path + ".dll"; if (File.Exists(path + ".dll")) return path + ".dll"; } return null; }