【问题标题】:Load AppConfig with binding redirects from resource使用来自资源的绑定重定向加载 AppConfig
【发布时间】:2020-05-04 17:47:55
【问题描述】:

我有一个 .NET Framework 4.6.2 应用程序 myApp.exe 具有多个内部和外部依赖项。所有依赖项都包含在主应用程序myApp.exe 中作为资源。

在应用程序启动时,我们的自定义程序集加载器通过事件AssemblyResolve 得到通知,并通过GetManifestResourceStream()Assembly.Load()myApp.exe 的资源中加载请求的程序集。

这工作正常,除了App.config:资源包含myApp.App.config,但自定义程序集加载器尚未加载它。这会导致一个问题,因为在App.config 中指定的所有程序集绑定重定向都不是由.NET 运行时应用的。将myApp.exe.config 放在myApp.exe 旁边时(与.NET 中的往常一样),一切正常。

我试图找到一种方法来避免附加文件myApp.exe.config。相反,我也想从资源中加载应用程序配置(尤其是绑定重定向)。这甚至可能吗?如果是,我该怎么做?

【问题讨论】:

  • 您是如何包含和加载App.config 文件的?
  • @PavelAnikhouski 你到底是什么意思? App.config 未加载 - 这是要解决的挑战。但它是作为资源嵌入的。
  • 我不得不重新阅读这个问题。当您嵌入了正确的 dll 时,为什么需要绑定重定向?
  • @Jacek:由于依赖地狱:我们在与 GAC 不同的版本中引用和嵌入 System.Net.Http。这在运行时崩溃。通过myApp.exe.config添加绑定重定向解决了这个问题。
  • 我想你在里面嵌入了正确的System.Net.Http?你试过了吗?blog.slaks.net/2013-12-25/redirecting-assembly-loads-at-runtime

标签: c#


【解决方案1】:

不幸的是,您无法告诉 CLR 要将哪个文件加载为运行时配置。运行时按以下顺序查找 xml 配置:

  1. 应用程序配置
  2. 机器配置

每当 CLR 需要来自配置的信息时执行查找,例如在程序集加载时绑定重定向和程序集位置。

这主要是程序集加载过程的一部分,最好保持原样。你可以在这里阅读更多信息:https://docs.microsoft.com/en-us/dotnet/framework/deployment/how-the-runtime-locates-assemblies

编辑:但是,您可以在没有配置文件的情况下生活。您说您将所有程序集嵌入到 exe 程序集中,并通过自定义解析器加载所有内容。请注意,仅当标准解析管道无法加载程序集时,才会调用您的自定义程序集解析器。看看这个答案:https://stackoverflow.com/a/26673659/2811109

【讨论】:

  • 谢谢!坦率地说,我期待你的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-14
  • 2017-09-30
  • 1970-01-01
  • 2018-10-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多