Exemplo n.º 1
0
 static void WindowsRuntimeMetadata_ReflectionOnlyNamespaceResolve(object sender, NamespaceResolveEventArgs e)
 {
     foreach (string s in WindowsRuntimeMetadata.ResolveNamespace(e.NamespaceName, null))
     {
         e.ResolvedAssemblies.Add(Assembly.ReflectionOnlyLoadFrom(s));
     }
 }
 void ReflectionOnlyNamespaceResolve(object sender, NamespaceResolveEventArgs e)
 {
     foreach (var assembly in referenceAssemblies.Concat(inputAssemblies))
     {
         if (assembly.DefinedTypes.Any(type => type.Namespace == e.NamespaceName))
         {
             e.ResolvedAssemblies.Add(assembly);
         }
     }
 }
Exemplo n.º 3
0
        /// <summary>
        /// Event handler for windows winmd resolution.
        /// </summary>
        /// <param name="sender"> The sender App Domain. </param>
        /// <param name="args"> The args. </param>
        private void WindowsRuntimeMetadataReflectionOnlyNamespaceResolve(object sender, NamespaceResolveEventArgs args)
        {
            // Note: This will throw on pre-Win8 OS versions
            IEnumerable <string> fileNames = WindowsRuntimeMetadata.ResolveNamespace(
                args.NamespaceName,
                null,                    // Will use OS installed .winmd files, you can pass explicit Windows SDK path here for searching 1st party WinRT types
                this.searchDirectories); // You can pass package graph paths, they will be used for searching .winmd files with 3rd party WinRT types

            foreach (string fileName in fileNames)
            {
                args.ResolvedAssemblies.Add(Assembly.ReflectionOnlyLoadFrom(fileName));
            }
        }
        private void WindowsRuntimeMetadata_ReflectionOnlyNamespaceResolve(object sender, NamespaceResolveEventArgs e)
        {
            // Create a directory list of paths to use when resolving assemblies
            List <string> dirs = new List <string>();

            // Add the path to the current assembly as one possible location
            dirs.Add(Path.GetDirectoryName(_assemblyFile));

            // Add non-empty reference directories as well
            if (_config.ReferenceDirectories != null)
            {
                string[] splitDirs = _config.ReferenceDirectories.Split(';');
                foreach (var d in splitDirs)
                {
                    if (!string.IsNullOrEmpty(d))
                    {
                        dirs.Add(d);
                    }
                }
            }

            // Resolve the namespace using the directory list. Unfortunately the system root usually overrides the passed folder.
            Log.Verbose("Resolving namespace '{0}' in assemblies located at '{1}'", e.NamespaceName, string.Join(";", dirs));
            IEnumerable <string> foundAssemblies = WindowsRuntimeMetadata.ResolveNamespace(e.NamespaceName, dirs);

            foreach (var assemblyName in foundAssemblies)
            {
                Log.Verbose(@"Found namespace '{0}' in assembly '{1}'", e.NamespaceName, assemblyName);
            }

            string path = foundAssemblies.FirstOrDefault();

            if (path == null)
            {
                return;
            }

            // HACK: Because the system path will override any local paths during resolution, go ahead and add
            // all .winmd files discovered.
            foreach (var assemblyPath in dirs)
            {
                var localAssemblies = Directory.GetFiles(assemblyPath, "*.winmd");
                foreach (var localAssembly in localAssemblies)
                {
                    if (localAssembly != e.RequestingAssembly.Location)
                    {
                        e.ResolvedAssemblies.Add(Assembly.ReflectionOnlyLoadFrom(localAssembly));
                    }
                }
            }

            // Finally add the path that was originally found in the earlier lookup.
            var assembly = Assembly.ReflectionOnlyLoadFrom(path);

            if (!e.ResolvedAssemblies.Contains(assembly))
            {
                e.ResolvedAssemblies.Add(assembly);
            }
        }
Exemplo n.º 5
0
        private static void WindowsRuntimeMetadata_ReflectionOnlyNamespaceResolve(object sender, NamespaceResolveEventArgs e)
        {
            string path =
                WindowsRuntimeMetadata.ResolveNamespace(e.NamespaceName, Enumerable.Empty <string>())
                .FirstOrDefault();

            e.ResolvedAssemblies.Add(Assembly.ReflectionOnlyLoadFrom(path));
        }