示例#1
0
 public RoslynAssemblyLoader(string rootPath,
                             IFileWatcher watcher,
                             IFrameworkReferenceResolver resolver,
                             IGlobalAssemblyCache globalAssemblyCache,
                             IAssemblyLoader dependencyLoader,
                             IResourceProvider resourceProvider)
 {
     _rootPath            = rootPath;
     _watcher             = watcher;
     _resolver            = resolver;
     _globalAssemblyCache = globalAssemblyCache;
     _dependencyLoader    = dependencyLoader;
     _resourceProvider    = resourceProvider;
 }
示例#2
0
 public RoslynAssemblyLoader(string rootPath,
                             IFileWatcher watcher,
                             IFrameworkReferenceResolver resolver,
                             IGlobalAssemblyCache globalAssemblyCache,
                             IAssemblyLoader dependencyLoader,
                             IResourceProvider resourceProvider)
 {
     _rootPath = rootPath;
     _watcher = watcher;
     _resolver = resolver;
     _globalAssemblyCache = globalAssemblyCache;
     _dependencyLoader = dependencyLoader;
     _resourceProvider = resourceProvider;
 }
        private static IDictionary <FrameworkName, FrameworkInformation> PopulateCache(IGlobalAssemblyCache globalAssemblyCache)
        {
            var info = new Dictionary <FrameworkName, FrameworkInformation>();

#if DESKTOP
            string defaultPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), @"Reference Assemblies\Microsoft\Framework\");

            PopulateReferenceAssemblies(defaultPath, globalAssemblyCache, info);

            // Additional profile paths
            var profilePaths = Environment.GetEnvironmentVariable("PROFILE_PATHS");

            if (profilePaths != null)
            {
                foreach (var profilePath in profilePaths.Split(';'))
                {
                    PopulateReferenceAssemblies(profilePath, globalAssemblyCache, info);
                }
            }
#endif
            foreach (var frameworkDirectory in GetFrameworkDirectories())
            {
                if (Directory.Exists(frameworkDirectory))
                {
                    PopulateReferenceAssemblies(frameworkDirectory, globalAssemblyCache, info);
                }
            }

            return(info);
        }
 public FrameworkReferenceResolver(IGlobalAssemblyCache globalAssemblyCache)
 {
     _globalAssemblyCache = globalAssemblyCache;
     _cache = PopulateCache(globalAssemblyCache);
 }
        private static void PopulateReferenceAssemblies(string path, IGlobalAssemblyCache globalAssemblyCache, IDictionary <FrameworkName, FrameworkInformation> cache)
        {
            var di = new DirectoryInfo(path);

            if (!di.Exists)
            {
                return;
            }

            foreach (var d in di.EnumerateDirectories())
            {
                if (d.Name.StartsWith("v"))
                {
                    continue;
                }

                foreach (var v in d.EnumerateDirectories())
                {
                    var    frameworkInfo = new FrameworkInformation();
                    var    frameworkName = new FrameworkName(d.Name, new Version(v.Name.TrimStart('v')));
                    var    facadePath    = Path.Combine(v.FullName, "RuntimeFacades");
                    string redistList    = Path.Combine(v.FullName, "RedistList", "FrameworkList.xml");

                    if (File.Exists(redistList))
                    {
                        foreach (var assemblyName in GetFrameworkAssemblies(redistList))
                        {
                            var assemblyPath = Path.Combine(v.FullName, assemblyName + ".dll");

                            if (!File.Exists(assemblyPath))
                            {
                                // Check the gac fror full framework only
                                if (frameworkName.Identifier == VersionUtility.DefaultTargetFramework.Identifier)
                                {
                                    if (!globalAssemblyCache.TryResolvePartialName(assemblyName, out assemblyPath))
                                    {
                                        continue;
                                    }
                                }
                                else
                                {
                                    continue;
                                }
                            }

                            frameworkInfo.Assemblies.Add(new AssemblyInfo(assemblyName, assemblyPath));
                        }
                    }
                    else
                    {
                        foreach (var assemblyFileInfo in v.EnumerateFiles("*.dll"))
                        {
                            try
                            {
#if DESKTOP // CORECLR_TODO: AssemblyName.GetAssemblyName
                                var an = AssemblyName.GetAssemblyName(assemblyFileInfo.FullName);
                                frameworkInfo.Assemblies.Add(new AssemblyInfo(an.Name, assemblyFileInfo.FullName));
#else
                                frameworkInfo.Assemblies.Add(new AssemblyInfo(assemblyFileInfo.Name, assemblyFileInfo.FullName));
#endif
                            }
                            catch (Exception ex)
                            {
                                // Probably not a valid assembly
                                Trace.TraceError(ex.Message);
                            }
                        }
                    }

                    cache[frameworkName] = frameworkInfo;
                }
            }
        }
 public FrameworkReferenceResolver(IGlobalAssemblyCache globalAssemblyCache)
 {
     _globalAssemblyCache = globalAssemblyCache;
     _cache = PopulateCache(globalAssemblyCache);
 }
        private static void PopulateReferenceAssemblies(string path, IGlobalAssemblyCache globalAssemblyCache, IDictionary<FrameworkName, FrameworkInformation> cache)
        {
            var di = new DirectoryInfo(path);

            if (!di.Exists)
            {
                return;
            }

            foreach (var d in di.EnumerateDirectories())
            {
                if (d.Name.StartsWith("v"))
                {
                    continue;
                }

                foreach (var v in d.EnumerateDirectories())
                {
                    var frameworkInfo = new FrameworkInformation();
                    var frameworkName = new FrameworkName(d.Name, new Version(v.Name.TrimStart('v')));
                    var facadePath = Path.Combine(v.FullName, "RuntimeFacades");
                    string redistList = Path.Combine(v.FullName, "RedistList", "FrameworkList.xml");

                    if (File.Exists(redistList))
                    {
                        foreach (var assemblyName in GetFrameworkAssemblies(redistList))
                        {
                            var assemblyPath = Path.Combine(v.FullName, assemblyName + ".dll");

                            if (!File.Exists(assemblyPath))
                            {
                                // Check the gac fror full framework only
                                if (frameworkName.Identifier == VersionUtility.DefaultTargetFramework.Identifier)
                                {
                                    if (!globalAssemblyCache.TryResolvePartialName(assemblyName, out assemblyPath))
                                    {
                                        continue;
                                    }
                                }
                                else
                                {
                                    continue;
                                }
                            }

                            frameworkInfo.Assemblies.Add(new AssemblyInfo(assemblyName, assemblyPath));
                        }
                    }
                    else
                    {
                        foreach (var assemblyFileInfo in v.EnumerateFiles("*.dll"))
                        {
                            try
                            {
            #if DESKTOP // CORECLR_TODO: AssemblyName.GetAssemblyName
                                var an = AssemblyName.GetAssemblyName(assemblyFileInfo.FullName);
                                frameworkInfo.Assemblies.Add(new AssemblyInfo(an.Name, assemblyFileInfo.FullName));
            #else
                                frameworkInfo.Assemblies.Add(new AssemblyInfo(assemblyFileInfo.Name, assemblyFileInfo.FullName));
            #endif
                            }
                            catch (Exception ex)
                            {
                                // Probably not a valid assembly
                                Trace.TraceError(ex.Message);
                            }
                        }
                    }

                    cache[frameworkName] = frameworkInfo;
                }
            }
        }
        private static IDictionary<FrameworkName, FrameworkInformation> PopulateCache(IGlobalAssemblyCache globalAssemblyCache)
        {
            var info = new Dictionary<FrameworkName, FrameworkInformation>();
            #if DESKTOP
            string defaultPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), @"Reference Assemblies\Microsoft\Framework\");

            PopulateReferenceAssemblies(defaultPath, globalAssemblyCache, info);

            // Additional profile paths
            var profilePaths = Environment.GetEnvironmentVariable("PROFILE_PATHS");

            if (profilePaths != null)
            {
                foreach (var profilePath in profilePaths.Split(';'))
                {
                    PopulateReferenceAssemblies(profilePath, globalAssemblyCache, info);
                }
            }
            #endif
            foreach (var frameworkDirectory in GetFrameworkDirectories())
            {
                if (Directory.Exists(frameworkDirectory))
                {
                    PopulateReferenceAssemblies(frameworkDirectory, globalAssemblyCache, info);
                }
            }

            return info;
        }