private static FrameworkInformation GetFrameworkInformation(DirectoryInfo directory, FrameworkName targetFramework) { var frameworkInfo = new FrameworkInformation(); frameworkInfo.Exists = true; frameworkInfo.Path = directory.FullName; // The redist list contains the list of assemblies for this target framework string redistList = Path.Combine(directory.FullName, "RedistList", "FrameworkList.xml"); if (File.Exists(redistList)) { frameworkInfo.RedistListPath = redistList; using (var stream = File.OpenRead(redistList)) { var frameworkList = XDocument.Load(stream); // On mono, the RedistList.xml has an entry pointing to the TargetFrameworkDirectory // It basically uses the GAC as the reference assemblies for all .NET framework // profiles var targetFrameworkDirectory = frameworkList.Root.Attribute("TargetFrameworkDirectory")?.Value; if (!string.IsNullOrEmpty(targetFrameworkDirectory)) { // For some odd reason, the paths are actually listed as \ so normalize them here targetFrameworkDirectory = targetFrameworkDirectory.Replace('\\', Path.DirectorySeparatorChar); // The specified path is the relative path from the RedistList.xml itself var resovledPath = Path.GetFullPath(Path.Combine(Path.GetDirectoryName(redistList), targetFrameworkDirectory)); // Update the path to the framework frameworkInfo.Path = resovledPath; PopulateAssemblies(frameworkInfo.Assemblies, resovledPath); PopulateAssemblies(frameworkInfo.Assemblies, Path.Combine(resovledPath, "Facades")); } else { foreach (var e in frameworkList.Root.Elements()) { var assemblyName = e.Attribute("AssemblyName").Value; var version = e.Attribute("Version")?.Value; var entry = new AssemblyEntry(); entry.Version = version != null?Version.Parse(version) : null; frameworkInfo.Assemblies.Add(assemblyName, entry); } } var nameAttribute = frameworkList.Root.Attribute("Name"); frameworkInfo.Name = nameAttribute == null ? null : nameAttribute.Value; } } return(frameworkInfo); }
private static void PopulateAssemblies(IDictionary <string, AssemblyEntry> assemblies, string path) { if (!Directory.Exists(path)) { return; } foreach (var assemblyPath in Directory.GetFiles(path, "*.dll")) { var name = Path.GetFileNameWithoutExtension(assemblyPath); var entry = new AssemblyEntry(); entry.Path = assemblyPath; assemblies[name] = entry; } }
private static FrameworkInformation GetFrameworkInformation(DirectoryInfo directory, FrameworkName targetFramework) { var frameworkInfo = new FrameworkInformation(); frameworkInfo.Exists = true; frameworkInfo.Path = directory.FullName; // The redist list contains the list of assemblies for this target framework string redistList = Path.Combine(directory.FullName, "RedistList", "FrameworkList.xml"); if (File.Exists(redistList)) { frameworkInfo.RedistListPath = redistList; using (var stream = File.OpenRead(redistList)) { var frameworkList = XDocument.Load(stream); foreach (var e in frameworkList.Root.Elements()) { var assemblyName = e.Attribute("AssemblyName").Value; var version = e.Attribute("Version")?.Value; var entry = new AssemblyEntry(); entry.Version = version != null?Version.Parse(version) : null; frameworkInfo.Assemblies.Add(assemblyName, entry); } var nameAttribute = frameworkList.Root.Attribute("Name"); frameworkInfo.Name = nameAttribute == null ? null : nameAttribute.Value; } } return(frameworkInfo); }
private void PopulateCache() { #if DNX451 if (PlatformHelper.IsMono) { var mscorlibLocationOnThisRunningMonoInstance = typeof(object).GetTypeInfo().Assembly.Location; var libPath = Path.GetDirectoryName(Path.GetDirectoryName(mscorlibLocationOnThisRunningMonoInstance)); // Mono is a bit inconsistent as .NET 4.5 and .NET 4.5.1 are the // same folder var supportedVersions = new Dictionary <string, string> { { "4.6", "4.5" }, { "4.5.3", "4.5" }, { "4.5.1", "4.5" }, { "4.5", "4.5" }, { "4.0", "4.0" } }; // Temporary cache while enumerating assemblies in directories var pathCache = new Dictionary <string, FrameworkInformation>(); foreach (var versionFolderPair in supportedVersions) { var targetFrameworkPath = Path.Combine(libPath, versionFolderPair.Value); if (!Directory.Exists(targetFrameworkPath)) { continue; } FrameworkInformation frameworkInfo; if (!pathCache.TryGetValue(targetFrameworkPath, out frameworkInfo)) { frameworkInfo = new FrameworkInformation(); frameworkInfo.Path = targetFrameworkPath; var assemblies = new List <Tuple <string, string> >(); PopulateAssemblies(assemblies, targetFrameworkPath); PopulateAssemblies(assemblies, Path.Combine(targetFrameworkPath, "Facades")); foreach (var pair in assemblies) { var entry = new AssemblyEntry(); entry.Path = pair.Item2; frameworkInfo.Assemblies[pair.Item1] = entry; } pathCache[targetFrameworkPath] = frameworkInfo; } var frameworkName = new FrameworkName(VersionUtility.NetFrameworkIdentifier, new Version(versionFolderPair.Key)); _cache[frameworkName] = frameworkInfo; List <FrameworkName> aliases; if (_monoAliases.TryGetValue(frameworkName, out aliases)) { foreach (var aliasFrameworkName in aliases) { _cache[aliasFrameworkName] = frameworkInfo; } } } // Not needed anymore pathCache.Clear(); } #endif }
private static void PopulateAssemblies(IDictionary<string, AssemblyEntry> assemblies, string path) { if (!Directory.Exists(path)) { return; } foreach (var assemblyPath in Directory.GetFiles(path, "*.dll")) { var name = Path.GetFileNameWithoutExtension(assemblyPath); var entry = new AssemblyEntry(); entry.Path = assemblyPath; assemblies[name] = entry; } }
private static FrameworkInformation GetFrameworkInformation(DirectoryInfo directory, FrameworkName targetFramework) { var frameworkInfo = new FrameworkInformation(); frameworkInfo.Exists = true; frameworkInfo.Path = directory.FullName; // The redist list contains the list of assemblies for this target framework string redistList = Path.Combine(directory.FullName, "RedistList", "FrameworkList.xml"); if (File.Exists(redistList)) { frameworkInfo.RedistListPath = redistList; using (var stream = File.OpenRead(redistList)) { var frameworkList = XDocument.Load(stream); // On mono, the RedistList.xml has an entry pointing to the TargetFrameworkDirectory // It basically uses the GAC as the reference assemblies for all .NET framework // profiles var targetFrameworkDirectory = frameworkList.Root.Attribute("TargetFrameworkDirectory")?.Value; if (!string.IsNullOrEmpty(targetFrameworkDirectory)) { // For some odd reason, the paths are actually listed as \ so normalize them here targetFrameworkDirectory = targetFrameworkDirectory.Replace('\\', Path.DirectorySeparatorChar); // The specified path is the relative path from the RedistList.xml itself var resovledPath = Path.GetFullPath(Path.Combine(Path.GetDirectoryName(redistList), targetFrameworkDirectory)); // Update the path to the framework frameworkInfo.Path = resovledPath; PopulateAssemblies(frameworkInfo.Assemblies, resovledPath); PopulateAssemblies(frameworkInfo.Assemblies, Path.Combine(resovledPath, "Facades")); } else { foreach (var e in frameworkList.Root.Elements()) { var assemblyName = e.Attribute("AssemblyName").Value; var version = e.Attribute("Version")?.Value; var entry = new AssemblyEntry(); entry.Version = version != null ? Version.Parse(version) : null; frameworkInfo.Assemblies.Add(assemblyName, entry); } } var nameAttribute = frameworkList.Root.Attribute("Name"); frameworkInfo.Name = nameAttribute == null ? null : nameAttribute.Value; } } return frameworkInfo; }
private void PopulateCache() { #if DNX451 if (PlatformHelper.IsMono) { var mscorlibLocationOnThisRunningMonoInstance = typeof(object).GetTypeInfo().Assembly.Location; var libPath = Path.GetDirectoryName(Path.GetDirectoryName(mscorlibLocationOnThisRunningMonoInstance)); // Mono is a bit inconsistent as .NET 4.5 and .NET 4.5.1 are the // same folder var supportedVersions = new Dictionary<string, string> { { "4.6", "4.5" }, { "4.5.3", "4.5" }, { "4.5.1", "4.5" }, { "4.5", "4.5" }, { "4.0", "4.0" } }; // Temporary cache while enumerating assemblies in directories var pathCache = new Dictionary<string, FrameworkInformation>(); foreach (var versionFolderPair in supportedVersions) { var targetFrameworkPath = Path.Combine(libPath, versionFolderPair.Value); if (!Directory.Exists(targetFrameworkPath)) { continue; } FrameworkInformation frameworkInfo; if (!pathCache.TryGetValue(targetFrameworkPath, out frameworkInfo)) { frameworkInfo = new FrameworkInformation(); frameworkInfo.Path = targetFrameworkPath; var assemblies = new List<Tuple<string, string>>(); PopulateAssemblies(assemblies, targetFrameworkPath); PopulateAssemblies(assemblies, Path.Combine(targetFrameworkPath, "Facades")); foreach (var pair in assemblies) { var entry = new AssemblyEntry(); entry.Path = pair.Item2; frameworkInfo.Assemblies[pair.Item1] = entry; } pathCache[targetFrameworkPath] = frameworkInfo; } var frameworkName = new FrameworkName(VersionUtility.NetFrameworkIdentifier, new Version(versionFolderPair.Key)); _cache[frameworkName] = frameworkInfo; List<FrameworkName> aliases; if (_monoAliases.TryGetValue(frameworkName, out aliases)) { foreach (var aliasFrameworkName in aliases) { _cache[aliasFrameworkName] = frameworkInfo; } } } // Not needed anymore pathCache.Clear(); } #endif }
private static FrameworkInformation GetFrameworkInformation(DirectoryInfo directory, FrameworkName targetFramework) { var frameworkInfo = new FrameworkInformation(); frameworkInfo.Exists = true; frameworkInfo.Path = directory.FullName; // The redist list contains the list of assemblies for this target framework string redistList = Path.Combine(directory.FullName, "RedistList", "FrameworkList.xml"); if (File.Exists(redistList)) { frameworkInfo.RedistListPath = redistList; using (var stream = File.OpenRead(redistList)) { var frameworkList = XDocument.Load(stream); foreach (var e in frameworkList.Root.Elements()) { var assemblyName = e.Attribute("AssemblyName").Value; var version = e.Attribute("Version")?.Value; var entry = new AssemblyEntry(); entry.Version = version != null ? Version.Parse(version) : null; frameworkInfo.Assemblies.Add(assemblyName, entry); } var nameAttribute = frameworkList.Root.Attribute("Name"); frameworkInfo.Name = nameAttribute == null ? null : nameAttribute.Value; } } return frameworkInfo; }