/*Telerik Authorship*/ internal void AddToUnresolvedCache(AssemblyStrongNameExtended fullName) { if (!this.pathRepository.AssemblyFaildedResolverCache.Contains(fullName)) { this.pathRepository.AssemblyFaildedResolverCache.Add(fullName); } }
/*Telerik Authorship*/ internal void RemoveFromUnresolvedCache(AssemblyStrongNameExtended fullName) { if (pathRepository.AssemblyFaildedResolverCache.Contains(fullName)) { pathRepository.AssemblyFaildedResolverCache.Remove(fullName); } }
/*Telerik Authorship*/ internal bool TryGetAssemblyPathsFromCache(AssemblyName sourceAssemblyName, AssemblyStrongNameExtended assemblyKey, out IEnumerable <string> filePaths) { filePaths = Enumerable.Empty <string>(); if (pathRepository.AssemblyPathName.ContainsKey(assemblyKey)) { /*Telerik Authorship*/ List <string> targets = pathRepository.AssemblyPathName.Where(a => a.Key == assemblyKey) .Select(a => a.Value) .ToList(); if (sourceAssemblyName.HasDefaultDir && targets.Any(d => Path.GetDirectoryName(d) == sourceAssemblyName.DefaultDir)) { filePaths = targets.Where(d => Path.GetDirectoryName(d) == sourceAssemblyName.DefaultDir); return(true); } else { /*Telerik Authorship*/ string targetAssembly = pathRepository.AssemblyPathName .Where(a => pathRepository.AssemblyPathArchitecture.ContainsKey(a.Value) && pathRepository.AssemblyPathArchitecture[a.Value].CanReference(sourceAssemblyName.TargetArchitecture)) .FirstOrDefault(a => a.Key == assemblyKey).Value; if (targetAssembly != null) { filePaths = new string[] { targetAssembly }; return(true); } } } return(false); }
public bool CheckFileExistence(AssemblyName assemblyName, string searchPattern, bool caching, bool checkForBaseDir, bool checkForArchitectPlatfrom = true) { AssemblyName assemblyNameFromStorage; if (TryGetAssemblyNameDefinition(searchPattern, caching, assemblyName.TargetArchitecture, out assemblyNameFromStorage, checkForArchitectPlatfrom)) { var areEquals = AreVersionEquals(assemblyNameFromStorage.Version, assemblyName.Version) && ArePublicKeyEquals(assemblyNameFromStorage.PublicKeyToken, assemblyName.PublicKeyToken) && assemblyName.TargetArchitecture.CanReference(assemblyNameFromStorage.TargetArchitecture) && (!checkForBaseDir || AreDefaultDirEqual(assemblyName, assemblyNameFromStorage)); if (areEquals && caching) { /*Telerik Authorship*/ ModuleDefinition module = AssemblyDefinition.ReadAssembly(searchPattern, readerParameters).MainModule; SpecialTypeAssembly special = module.IsReferenceAssembly() ? SpecialTypeAssembly.Reference : SpecialTypeAssembly.None; AssemblyStrongNameExtended assemblyKey = new AssemblyStrongNameExtended(assemblyName.FullName, assemblyName.TargetArchitecture, special); pathRepository.AssemblyPathName.Add(assemblyKey, searchPattern); if (!pathRepository.AssemblyPathArchitecture.ContainsKey(searchPattern)) { TargetArchitecture architecture = module.GetModuleArchitecture(); pathRepository.AssemblyPathArchitecture.Add(new KeyValuePair <string, TargetArchitecture>(searchPattern, architecture)); } } return(areEquals); } return(false); }
/*Telerik Authorship*/ internal string GetAssemblyPath(AssemblyName assemblyName, AssemblyStrongNameExtended assemblyKey) { if (IsFailedAssembly(assemblyKey)) { return(string.Empty); } string filePath = string.Empty; if (string.IsNullOrEmpty(filePath)) { IEnumerable <string> filePaths = GetAssemblyPaths(assemblyName, assemblyKey); filePath = filePaths.FirstOrDefault() ?? string.Empty; if (string.IsNullOrEmpty(filePath)) { foreach (string currentFilePath in filePaths) { if (!string.IsNullOrEmpty(currentFilePath)) { filePath = currentFilePath; break; } } } if (CheckFoundedAssembly(assemblyName, filePath)) { return(filePath); } } return(filePath); }
internal void AddToAssemblyPathNameCache(AssemblyName assemblyName, string filePath) { /*Telerik Authorship*/ ModuleDefinition module = AssemblyDefinition.ReadAssembly(filePath, readerParameters).MainModule; SpecialTypeAssembly special = module.IsReferenceAssembly() ? SpecialTypeAssembly.Reference : SpecialTypeAssembly.None; AssemblyStrongNameExtended assemblyKey = new AssemblyStrongNameExtended(assemblyName.FullName, assemblyName.TargetArchitecture, special); pathRepository.AssemblyPathName.Add(assemblyKey, filePath); if (!pathRepository.AssemblyPathArchitecture.ContainsKey(filePath)) { pathRepository.AssemblyPathArchitecture.Add(new KeyValuePair <string, TargetArchitecture>(filePath, assemblyName.TargetArchitecture)); } }
public void AddToAssemblyCache(string filePath, TargetArchitecture architecture) { AssemblyName assemblyName; if (TryGetAssemblyNameDefinition(filePath, true, architecture, out assemblyName)) { TargetPlatform platform = GetTargetPlatform(filePath); if (!pathRepository.AssemblyParts.ContainsKey(filePath)) { pathRepository.AssemblyParts.Add(filePath, platform); } /*Telerik Authorship*/ ModuleDefinition module = AssemblyDefinition.ReadAssembly(filePath, readerParameters).MainModule; SpecialTypeAssembly special = module.IsReferenceAssembly() ? SpecialTypeAssembly.Reference : SpecialTypeAssembly.None; AssemblyStrongNameExtended assemblyKey = new AssemblyStrongNameExtended(assemblyName.FullName, assemblyName.TargetArchitecture, special); if (!pathRepository.AssemblyPathName.ContainsKey(assemblyKey)) { CheckFileExistence(assemblyName, filePath, true, false); RemoveFromUnresolvedCache(assemblyKey); } } }
/*Telerik Authorship*/ internal static void Add(this IList <AssemblyPathName> collection, AssemblyStrongNameExtended assemblyKey, string value) { collection.Add(new AssemblyPathName(assemblyKey, value)); }
/*Telerik Authorship*/ internal static bool ContainsKey(this IList <AssemblyPathName> collection, AssemblyStrongNameExtended assemblyKey) { return(collection.Any(a => a.Key == assemblyKey)); }
/*Telerik Authorship*/ internal bool IsFailedAssembly(AssemblyStrongNameExtended fullName) { return(pathRepository.AssemblyFaildedResolverCache.Contains(fullName)); }
/*Telerik Authorship*/ public IEnumerable <string> GetAssemblyPaths(AssemblyName sourceAssemblyName, AssemblyStrongNameExtended assemblyKey) { IEnumerable <string> results; if (TryGetAssemblyPathsFromCache(sourceAssemblyName, assemblyKey, out results)) { return(results); } if (IsFailedAssembly(assemblyKey)) { return(Enumerable.Empty <string>()); } var platforms = new List <TargetPlatform> { TargetPlatform.CLR_4, TargetPlatform.CLR_2_3, TargetPlatform.Silverlight, TargetPlatform.WindowsPhone, TargetPlatform.WindowsCE, TargetPlatform.CLR_1, TargetPlatform.WinRT }; var result = new List <string>(); foreach (TargetPlatform platform in platforms) { IEnumerable <string> assemblyLocations = GetAssemblyLocationsByPlatform(sourceAssemblyName, platform); result.AddRange(assemblyLocations); } return(result); }