当前位置:  开发笔记 > 编程语言 > 正文

如何在运行时更新配置文件中的assemblyBinding部分?

如何解决《如何在运行时更新配置文件中的assemblyBinding部分?》经验,为你挑选了1个好方法。

我正在尝试动态更改程序集绑定(从一个版本到另一个版本).

我试过这段代码,但它不起作用:

      Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
      ConfigurationSection assemblyBindingSection = config.Sections["assemblyBinding"];

      assemblyBindingSection.SectionInformation.ConfigSource = "bindingConf.xml";
      config.Save(ConfigurationSaveMode.Modified);

      ConfigurationManager.RefreshSection("assemblyBinding");

bindingConf.xml含有assemblyBinding部配置.

那么可以在运行时更改此部分吗?怎么做?我有什么替代品?



1> Eric Rosenbe..:

我发现动态绑定到不同版本的程序集的最好方法是挂钩AppDomain.AssemblyResolve事件.只要运行时无法找到应用程序链接的确切程序集,就会触发此事件,并且它允许您在其位置提供另一个自己加载的程序集(只要它是兼容的).

例如,您可以在应用程序的主类上放置一个静态构造函数来挂钩事件,如下所示:

using System.Reflection;

static Program()
{
    AppDomain.CurrentDomain.AssemblyResolve += delegate(object sender, ResolveEventArgs e)
    {
        AssemblyName requestedName = new AssemblyName(e.Name);

        if (requestedName.Name == "AssemblyNameToRedirect")
        {
            // Put code here to load whatever version of the assembly you actually have

            return Assembly.LoadFrom("RedirectedAssembly.DLL");
        }
        else
        {
            return null;
        }
    };
}

此方法避免了处理配置文件中的程序集绑定的需要,并且就您可以使用它执行的操作而言更灵活一些.

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有