示例#1
0
 /*Telerik Authorship*/
 internal void AddToUnresolvedCache(AssemblyStrongNameExtended fullName)
 {
     if (!this.pathRepository.AssemblyFaildedResolverCache.Contains(fullName))
     {
         this.pathRepository.AssemblyFaildedResolverCache.Add(fullName);
     }
 }
示例#2
0
 /*Telerik Authorship*/
 internal void RemoveFromUnresolvedCache(AssemblyStrongNameExtended fullName)
 {
     if (pathRepository.AssemblyFaildedResolverCache.Contains(fullName))
     {
         pathRepository.AssemblyFaildedResolverCache.Remove(fullName);
     }
 }
示例#3
0
        /*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);
        }
示例#4
0
        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);
        }
示例#5
0
        /*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);
        }
示例#6
0
        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));
            }
        }
示例#7
0
        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);
                }
            }
        }
示例#8
0
 /*Telerik Authorship*/
 internal static void Add(this IList <AssemblyPathName> collection, AssemblyStrongNameExtended assemblyKey, string value)
 {
     collection.Add(new AssemblyPathName(assemblyKey, value));
 }
示例#9
0
 /*Telerik Authorship*/
 internal static bool ContainsKey(this IList <AssemblyPathName> collection, AssemblyStrongNameExtended assemblyKey)
 {
     return(collection.Any(a => a.Key == assemblyKey));
 }
示例#10
0
 /*Telerik Authorship*/
 internal bool IsFailedAssembly(AssemblyStrongNameExtended fullName)
 {
     return(pathRepository.AssemblyFaildedResolverCache.Contains(fullName));
 }
示例#11
0
        /*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);
        }