gpt4 book ai didi

c# - 在运行时加载 2 个版本的程序集

转载 作者:太空狗 更新时间:2023-10-29 21:48:07 24 4
gpt4 key购买 nike

过去几周我一直在尝试破解这个问题,但还没有找到好的解决方案;希望我能在这里得到答案。

我有两个程序集(ZA 和 ZB),它们都指向一个公共(public)项目/dll (ZC),但可能位于不同的版本上(即相同的 dll 名称、相同的命名空间、某些类可能不同)。每个程序集都独立工作,但是,如果一个程序集在运行时由另一个程序集加载(例如 A 加载 B),那么我无法让它工作。需要一些帮助。

这是设置:

  • ZA依赖于ZC(通用)1.1版本
  • ZB依赖ZC 1.0版本

ZA 需要加载需要在运行时加载 ZB(取决于 ZC)中的东西。

ZA 是主应用程序。在它的bin目录下,有一个插件目录plugins/plugin-ZB,我想把所有的ZB和它的依赖(ZC)放在这个目录下。

这是我到目前为止尝试过的:

Assembly.Load() 使用相同版本的 dll - 工作正常。

Assembly.Load() 使用不同版本的 dll - ZB 加载,但是当方法运行时,我得到一个方法未找到的异常。

AppDomain.Load() 遇到文件未找到错误;我什至使用委托(delegate)来解析程序集。

关于 ZC 的一些细节:- 有些方法是公共(public)静态的(有些不是)。例如。 Log.Log("你好");- 有些可能会返回值(基元或对象)。- 一些方法是非静态的(和返回值)。

帮助? -TIA

最佳答案

    m_Assembly1 = Reflection.Assembly.LoadFile(IO.Path.Combine(System.Environment.CurrentDirectory, "Old Version\Some.dll"))
m_Assembly2 = Reflection.Assembly.LoadFile(IO.Path.Combine(System.Environment.CurrentDirectory, "New Version\Some.dll"))

Console.WriteLine("Old Version: " & m_Assembly1.GetName.Version.ToString)
Console.WriteLine("New Version: " & m_Assembly2.GetName.Version.ToString)

m_OldObject = m_Assembly1.CreateInstance("FullClassName")
m_NewObject = m_Assembly2.CreateInstance("FullClassName")

从现在开始,我使用后期绑定(bind)和/或反射来运行我的测试。

.NET: Load two version of the same DLL

关于c# - 在运行时加载 2 个版本的程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1189372/

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