internal AssemblyFoldersFromConfig(string configFile, string targetRuntimeVersion, ProcessorArchitecture targetArchitecture) { ErrorUtilities.VerifyThrowArgumentNull(configFile, nameof(configFile)); ErrorUtilities.VerifyThrowArgumentNull(targetRuntimeVersion, nameof(targetRuntimeVersion)); var collection = AssemblyFolderCollection.Load(configFile); var assemblyTargets = GatherVersionStrings(targetRuntimeVersion, collection); bool targeting64Bit = targetArchitecture == ProcessorArchitecture.Amd64 || targetArchitecture == ProcessorArchitecture.IA64; // Platform-agnostic folders first. FindDirectories(assemblyTargets, target => string.IsNullOrEmpty(target.Platform)); if (EnvironmentUtilities.Is64BitOperatingSystem) { if (targeting64Bit) { FindDirectories(assemblyTargets, target => !string.IsNullOrEmpty(target.Platform) && target.Platform.Equals("x64", StringComparison.OrdinalIgnoreCase)); FindDirectories(assemblyTargets, target => !string.IsNullOrEmpty(target.Platform) && target.Platform.Equals("x86", StringComparison.OrdinalIgnoreCase)); } else { FindDirectories(assemblyTargets, target => !string.IsNullOrEmpty(target.Platform) && target.Platform.Equals("x86", StringComparison.OrdinalIgnoreCase)); FindDirectories(assemblyTargets, target => !string.IsNullOrEmpty(target.Platform) && target.Platform.Equals("x64", StringComparison.OrdinalIgnoreCase)); } } else { FindDirectories(assemblyTargets, target => !string.IsNullOrEmpty(target.Platform) && target.Platform.Equals("x86", StringComparison.OrdinalIgnoreCase)); } }
private static List <AssemblyFolderItem> GatherVersionStrings(string targetRuntimeVersion, AssemblyFolderCollection collection) { return ((from folder in collection.AssemblyFolders let targetVersion = VersionUtilities.ConvertToVersion(targetRuntimeVersion) let replacementVersion = GetFrameworkVersion(folder.FrameworkVersion) where targetVersion != null && targetVersion >= replacementVersion orderby folder.FrameworkVersion descending select folder).ToList()); }