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); } } }
/// <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); } }
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)); }