gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 17:33:06 24 4
gpt4 key购买 nike

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

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

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

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

ConfigurationManager.RefreshSection("assemblyBinding");

使用包含 assemblyBinding 部分配置的 bindingConf.xml

那么能否在运行时更改此部分?怎么做?我有什么选择?

最佳答案

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

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

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

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

关于c# - 如何在运行时更新配置文件中的 assemblyBinding 部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/325788/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com