由于版本冲突,无法加载某个程序集


一个程序集(exe(依赖于一个nuget包(实际上是serilog.settings.configuration 3.1.0(此程序包依赖于microsoft.extensions.options.configurationextensions(>=2.0.0(,后者又依赖于microsoft.extensions.configuration.binder(>=22.0.0(一切都好。

然而,我在解决方案中还有其他项目(类库(,这些项目不是从exe项目中引用的(将在运行时加载(,其中一个依赖于较新版本的microsoft.extensions.configuration.binder(6.0.0(,这一切都不好。无法加载新版本,因为exe项目已加载旧版本。

我可以通过显式添加microsoft.extensions.configuration.binder(6.0.0(作为exe项目的依赖项来解决这个问题,但我想有更好的方法可以做到这一点,是吗?(如果由于某些原因(例如用户选择(而依赖于较新版本的动态加载程序集没有加载,我最终会在过程中加载不必要的新程序集,在这种情况下可能不是大问题,但在其他情况下可能是(。

我正在使用.Net 6,因此加载到单独的AppDomain(afaik(不是的选项

如果这些程序集是强命名的,那么使用gacutil.exe将这些程序集的不同版本放入GAC中就可以了。如果这对您不起作用,您仍然可以选择覆盖默认加载行为。以下两篇文章很好地解释了这个主题(对于NET Framework(:

  • 了解C#中程序集的加载方式
  • 如何解决.NET引用和NuGet包版本冲突

如果AppDomain和AppDomain.CurrentDomain.AssemblyResolve不适合您,请尝试使用System.Runtime.Loader命名空间,特别是AssemblyDependencyResolver类。

最新更新