/// <summary> /// Constructor /// </summary> /// <param name="configuration">The XPath navigator containing the configuration settings</param> public AssemblyResolver(XPathNavigator configuration) : this() { Collection <BindingRedirectSettings> importedSettings; BindingRedirectSettings brs; string useGacValue = configuration.GetAttribute("use-gac", String.Empty); if (!String.IsNullOrEmpty(useGacValue)) { this.UseGac = Convert.ToBoolean(useGacValue, CultureInfo.InvariantCulture); } // Load assembly binding redirects if specified foreach (XPathNavigator nav in configuration.Select("assemblyBinding/dependentAssembly")) { brs = BindingRedirectSettings.FromXPathNavigator(nav, null, null); // Import settings from a configuration file? if (!String.IsNullOrEmpty(brs.ConfigurationFile)) { ConsoleApplication.WriteMessage(LogLevel.Info, "Importing settings from: {0}", brs.ConfigurationFile); importedSettings = BindingRedirectSettings.FromConfigFile(brs.ConfigurationFile); foreach (BindingRedirectSettings imported in importedSettings) { ConsoleApplication.WriteMessage(LogLevel.Info, "Loaded assembly binding redirect: {0}", imported.ToString()); redirects.Add(imported); } } else { ConsoleApplication.WriteMessage(LogLevel.Info, "Loaded assembly binding redirect: {0}", brs.ToString()); redirects.Add(brs); } } // If specified, load assembly names to ignore if unresolved foreach (XPathNavigator nav in configuration.Select("ignoreIfUnresolved/assemblyIdentity")) { string name = nav.GetAttribute("name", String.Empty); if (!String.IsNullOrEmpty(name)) { ignoreIfUnresolved.Add(name); } } }
/// <summary> /// Load assembly binding redirects from a configuration file. /// </summary> /// <param name="configFile">The configuration filename</param> /// <returns>A collection containing the assembly binding redirects</returns> public static Collection <BindingRedirectSettings> FromConfigFile(string configFile) { XmlNamespaceManager nsm; XmlDocument config; XPathNavigator navConfig; Collection <BindingRedirectSettings> redirects = new Collection <BindingRedirectSettings>(); config = new XmlDocument(); config.Load(configFile); nsm = new XmlNamespaceManager(config.NameTable); nsm.AddNamespace("binding", "urn:schemas-microsoft-com:asm.v1"); navConfig = config.CreateNavigator(); foreach (XPathNavigator nav in navConfig.Select( "configuration/runtime/binding:assemblyBinding/binding:dependentAssembly", nsm)) { redirects.Add(BindingRedirectSettings.FromXPathNavigator(nav, nsm, "binding")); } return(redirects); }