【发布时间】:2016-08-31 22:37:56
【问题描述】:
有人要求我帮助开发包含用 VB.NET 编写的 DLL 的产品。客户的可执行文件引用这些 DLL。抽象一下情况:
背景:
产品LocationProduct 的版本1 包含Location1.dll,其中包括命名空间Country.Province 中的接口ICounty。客户使用 Location1.dll 编译他们的可执行文件。
Namespace Country.Province
Public Interface ICounty
Property District As String
End Interface
End Namespace
LocationProduct 的第 2 版除了 Location1.dll 之外还包含 Location2.dll。接口 ICounty 已从 Location1.dll 移至 Location2.dll,但接口及其命名空间未更改。新客户使用 LocationProduct 的第 2 版并参考 Location1.dll 和 Location2.dll 编译他们的可执行文件。
问题:
一位客户的可执行文件引用了 LocationProduct 的版本 1,该客户尝试升级到版本 2。客户收到异常“无法从程序集 'Location1... 加载类型 'Country.Province.ICounty'”。
如果接口 ICounty 从 Location2.dll 移回 Location1.dll,使用版本 2 编译的可执行文件会出现类似的异常,“无法从程序集 'Location2... 加载类型 'Country.Province.ICounty'”。
有没有办法改变 LocationProduct 让客户不需要重新编译?
【问题讨论】:
-
当您说尝试升级到版本 2 时,他们是否升级了可执行文件和 DLL 文件?
-
客户的产品与 LocationProduct 分开安装。一位客户使用版本 1 的 LocationProduct 构建了他的可执行文件。客户后来卸载了版本 1 并安装了版本 2。客户希望他的可执行文件能够与 LocationProduct 的版本 2 一起使用,而无需重新编译。但是,LocationProduct 的版本 1 和 2 没有保持兼容性,因为 ICounty 已从 Location1.dll 移至 Location2.dll。我们希望避免要求客户在将 LocationProduct 从版本 1 升级到版本 2 后重新编译他们的可执行文件。
标签: vb.net