private AssemblyNameInfo[] InjectMsTestIntoReferencedAssemblyNames(IMetadataAssembly assembly) { var referencedAssemblyNames = assembly.ReferencedAssembliesNames; var updatedReferencedAssemblyNames = new AssemblyNameInfo[referencedAssemblyNames.Length + 1]; Array.Copy(referencedAssemblyNames, updatedReferencedAssemblyNames, referencedAssemblyNames.Length); updatedReferencedAssemblyNames[referencedAssemblyNames.Length] = new AssemblyNameInfo(DotNetMsTestAssemblyName); SetReferencedAssemblyNames(assembly, updatedReferencedAssemblyNames); return referencedAssemblyNames; }
public IMetadataAccess ResolveAssembly(AssemblyNameInfo name, out FileSystemPath assemblyLocation) { try { Assembly assembly = Assembly.Load(name.FullName); assemblyLocation = new FileSystemPath((AssemblyUtils.GetAssemblyLocalPath(assembly))); return MetadataProviderFactory.DefaultProvider.GetFromFile(assemblyLocation); } catch { assemblyLocation = null; return null; } }
public IEnumerable<FileSystemPath> GetAnnotationsFiles(AssemblyNameInfo assemblyName = null, FileSystemPath assemblyLocation = null) { if (assemblyName == null) return annotations.Values; return annotations[assemblyName.Name]; }
private static string NameAndVersion([NotNull] this AssemblyNameInfo assemblyName) { return(string.Format("{0}, {1}", SanitizeAssemblyName(assemblyName.Name), assemblyName.Version)); }
public IMetadataTypeInfo GetTypeInfoFromQualifiedName(string name, AssemblyNameInfo assemblyName, bool searchReferencedAssemblies) { return(_metadataAssembly.GetTypeInfoFromQualifiedName(name, assemblyName, searchReferencedAssemblies)); }
public GacEntry(AssemblyNameInfo r, string fileName) { this.r = r; this.fileName = fileName; }
/// <inheritdoc/> public AssemblyDef Resolve(AssemblyNameInfo assembly, ModuleDef sourceModule) { return(null); }
public IEnumerable<FileSystemPath> GetAnnotationsFiles(AssemblyNameInfo assemblyName, FileSystemPath assemblyLocation) { return extensionManager.IsInstalled() ? EmptyList<FileSystemPath>.InstanceList : myAnnotations[assemblyName.Name]; }
/// <inheritdoc/> public AssemblyDef Resolve(AssemblyNameInfo assembly, ModuleDef sourceModule) { return null; }
private static bool ReferencesAssembly(IProject project, AssemblyNameInfo name) { AssemblyNameInfo info; return ReferencedAssembliesService.IsProjectReferencingAssemblyByName(project, project.GetCurrentTargetFrameworkId(), name, out info); }
/// <summary> /// Determinates whether member of the base type is visible from a derived type. /// </summary> /// <param name="baseMember">The member which visibility is checked.</param> /// <param name="derivedType">The derived type.</param> /// <returns>true if the member is visible from derived type, othewise false.</returns> public static bool IsVisibleFromDerived(IMemberDef?baseMember, TypeDef?derivedType) { if (baseMember is null) { return(false); } if (derivedType is null) { return(false); } MethodAttributes attrs = GetAccessAttributes(baseMember) & MethodAttributes.MemberAccessMask; if (attrs == MethodAttributes.Private) { return(false); } if (baseMember.DeclaringType.Module == derivedType.Module) { return(true); } if (attrs == MethodAttributes.Assembly || attrs == MethodAttributes.FamANDAssem) { var derivedTypeAsm = derivedType.Module.Assembly; var asm = baseMember.DeclaringType.Module.Assembly; if (derivedTypeAsm is not null && asm is not null) { foreach (var attribute in asm.CustomAttributes) { if (!Compare(attribute.AttributeType, systemRuntimeCompilerServicesString, internalsVisibleToAttributeString)) { continue; } if (attribute.ConstructorArguments.Count == 0) { continue; } string assemblyName = attribute.ConstructorArguments[0].Value as UTF8String; if (assemblyName is null) { continue; } assemblyName = new AssemblyNameInfo(assemblyName).Name; if (StringComparer.OrdinalIgnoreCase.Equals(assemblyName, derivedTypeAsm.Name)) { return(true); } } foreach (var attribute in derivedTypeAsm.CustomAttributes) { if (!Compare(attribute.AttributeType, systemRuntimeCompilerServicesString, ignoresAccessChecksToAttributeString)) { continue; } if (attribute.ConstructorArguments.Count == 0) { continue; } string assemblyName = attribute.ConstructorArguments[0].Value as UTF8String; if (assemblyName is null) { continue; } assemblyName = new AssemblyNameInfo(assemblyName).Name; if (StringComparer.OrdinalIgnoreCase.Equals(assemblyName, asm.Name)) { return(true); } } } return(false); } return(true); }
public IMetadataTypeInfo GetTypeInfoFromQualifiedName(string name, AssemblyNameInfo assemblyName, bool searchReferencedAssemblies) { return _metadataAssembly.GetTypeInfoFromQualifiedName(name, assemblyName, searchReferencedAssemblies); }
public static bool IsProjectReferencingAssembly([CanBeNull] this IProjectElement projectElement, AssemblyNameInfo assemblyNameInfo) { AssemblyNameInfo referencedAssembly; return ReferencedAssembliesService.IsProjectReferencingAssemblyByName(projectElement, assemblyNameInfo, out referencedAssembly); }
private static AssemblyNameInfo MockAssemblyNameInfo(string name, string version) { return(AssemblyNameInfo.Create(name, new Version(version))); }
private static bool ReferencesAssembly(IProject project, TargetFrameworkId targetFrameworkId, AssemblyNameInfo name) { return(ReferencedAssembliesService.IsProjectReferencingAssemblyByName(project, targetFrameworkId, name, out var _)); }
/// <summary> /// Constructor /// </summary> /// <param name="asmName">Assembly name info</param> /// <exception cref="ArgumentNullException">If <paramref name="asmName"/> is <c>null</c></exception> public AssemblyRefUser(AssemblyNameInfo asmName) { if (asmName == null) throw new ArgumentNullException("asmName"); this.version = asmName.Version ?? new Version(0, 0, 0, 0); this.publicKeyOrToken = asmName.PublicKeyOrToken; this.name = UTF8String.IsNullOrEmpty(asmName.Name) ? UTF8String.Empty : asmName.Name; this.locale = asmName.Locale; this.flags = publicKeyOrToken is PublicKey ? AssemblyAttributes.PublicKey : AssemblyAttributes.None; }
public static bool IsProjectReferencingAssembly([CanBeNull] this IProjectElement projectElement, AssemblyNameInfo assemblyNameInfo) { AssemblyNameInfo referencedAssembly; return(ReferencedAssembliesService.IsProjectReferencingAssemblyByName(projectElement, assemblyNameInfo, out referencedAssembly)); }
public IEnumerable <FileSystemPath> GetAnnotationsFiles(AssemblyNameInfo assemblyName, FileSystemPath assemblyLocation) { return(extensionManager.IsInstalled() ? EmptyList <FileSystemPath> .InstanceList : myAnnotations[assemblyName.Name]); }
private void SetReferencedAssemblyNames(IMetadataAssembly assembly, AssemblyNameInfo[] referencedAssemblyNames) { assembly.SetField("myReferencedAssembliesNames", referencedAssemblyNames); }
public IDnSpyFile Resolve(IAssembly assembly, ModuleDef sourceModule = null) { if (assembly.IsContentTypeWindowsRuntime) { if (failedAssemblyResolveCache.IsFailed(assembly)) { return(null); } var file = ResolveWinMD(assembly, sourceModule); if (file == null) { failedAssemblyResolveCache.MarkFailed(assembly); } return(file); } else { // WinMD files have a reference to mscorlib but its version is always 255.255.255.255 // since mscorlib isn't really loaded. The resolver only loads exact versions, so // we must change the version or the resolve will fail. if (assembly.Name == "mscorlib" && assembly.Version == invalidMscorlibVersion) { assembly = new AssemblyNameInfo(assembly) { Version = newMscorlibVersion } } ; if (failedAssemblyResolveCache.IsFailed(assembly)) { return(null); } var file = ResolveNormal(assembly, sourceModule); if (file == null) { failedAssemblyResolveCache.MarkFailed(assembly); } return(file); } } IDnSpyFile ResolveNormal(IAssembly assembly, ModuleDef sourceModule) { var existingFile = fileManager.FindAssembly(assembly); if (existingFile != null) { return(existingFile); } var file = LookupFromSearchPaths(assembly, sourceModule, true); if (file != null) { return(fileManager.GetOrAddCanDispose(file)); } if (fileManager.Settings.UseGAC) { var gacFile = GacInfo.FindInGac(assembly); if (gacFile != null) { return(fileManager.TryGetOrCreateInternal(DnSpyFileInfo.CreateFile(gacFile), true, true)); } foreach (var path in GacInfo.OtherGacPaths) { file = TryLoadFromDir(assembly, true, path); if (file != null) { return(fileManager.GetOrAddCanDispose(file)); } } } file = LookupFromSearchPaths(assembly, sourceModule, false); if (file != null) { return(fileManager.GetOrAddCanDispose(file)); } return(null); } IDnSpyFile LookupFromSearchPaths(IAssembly asmName, ModuleDef sourceModule, bool exactCheck) { IDnSpyFile file; string sourceModuleDir = null; if (sourceModule != null && File.Exists(sourceModule.Location)) { sourceModuleDir = Path.GetDirectoryName(sourceModule.Location); file = TryLoadFromDir(asmName, exactCheck, sourceModuleDir); if (file != null) { return(file); } } var ary = asmSearchPathsArray; foreach (var path in ary) { file = TryLoadFromDir(asmName, exactCheck, path); if (file != null) { return(file); } } return(null); } IDnSpyFile TryLoadFromDir(IAssembly asmName, bool exactCheck, string dirPath) { string baseName; try { baseName = Path.Combine(dirPath, asmName.Name); } catch (ArgumentException) { // eg. invalid chars in asmName.Name return(null); } return(TryLoadFromDir2(asmName, exactCheck, baseName + ".dll") ?? TryLoadFromDir2(asmName, exactCheck, baseName + ".exe")); } IDnSpyFile TryLoadFromDir2(IAssembly asmName, bool exactCheck, string filename) { if (!File.Exists(filename)) { return(null); } IDnSpyFile file = null; bool error = true; try { file = fileManager.TryCreateDnSpyFile(DnSpyFileInfo.CreateFile(filename)); if (file == null) { return(null); } file.IsAutoLoaded = true; var asm = file.AssemblyDef; if (asm == null) { return(null); } bool b = exactCheck ? AssemblyNameComparer.CompareAll.Equals(asmName, asm) : AssemblyNameComparer.NameAndPublicKeyTokenOnly.Equals(asmName, asm); if (!b) { return(null); } error = false; return(file); } finally { if (error) { if (file is IDisposable) { ((IDisposable)file).Dispose(); } } } } IDnSpyFile ResolveWinMD(IAssembly assembly, ModuleDef sourceModule) { var existingFile = fileManager.FindAssembly(assembly); if (existingFile != null) { return(existingFile); } foreach (var winmdPath in GacInfo.WinmdPaths) { string file; try { file = Path.Combine(winmdPath, assembly.Name + ".winmd"); } catch (ArgumentException) { continue; } if (File.Exists(file)) { return(fileManager.TryGetOrCreateInternal(DnSpyFileInfo.CreateFile(file), true, true)); } } return(null); } }
static IEnumerable <GacFileInfo> GetAssemblies(GacDirInfo gacInfo) { foreach (var subDir in gacInfo.SubDirs) { var baseDir = Path.Combine(gacInfo.Path, subDir); foreach (var dir in GetDirectories(baseDir)) { foreach (var dir2 in GetDirectories(dir)) { Version version; string culture; PublicKeyToken pkt; if (gacInfo.Version == 2) { var m = gac2Regex.Match(Path.GetFileName(dir2)); if (!m.Success || m.Groups.Count != 4) { continue; } if (!Version.TryParse(m.Groups[1].Value, out version)) { continue; } culture = m.Groups[2].Value; pkt = new PublicKeyToken(m.Groups[3].Value); if (PublicKeyBase.IsNullOrEmpty2(pkt)) { continue; } } else if (gacInfo.Version == 4) { var m = gac4Regex.Match(Path.GetFileName(dir2)); if (!m.Success || m.Groups.Count != 4) { continue; } if (!Version.TryParse(m.Groups[1].Value, out version)) { continue; } culture = m.Groups[2].Value; pkt = new PublicKeyToken(m.Groups[3].Value); if (PublicKeyBase.IsNullOrEmpty2(pkt)) { continue; } } else { throw new InvalidOperationException(); } var asmName = Path.GetFileName(dir); var file = Path.Combine(dir2, asmName) + ".dll"; if (!File.Exists(file)) { file = Path.Combine(dir2, asmName) + ".exe"; if (!File.Exists(file)) { continue; } } var asmInfo = new AssemblyNameInfo { Name = asmName, Version = version, Culture = culture, PublicKeyOrToken = pkt, }; yield return(new GacFileInfo(asmInfo, file)); } } } }
public AssemblyDef Resolve(AssemblyNameInfo assembly, ModuleDef sourceModule) { var node = parent.LookupReferencedAssembly(assembly); return(node != null ? node.AssemblyDefinition : null); }