【问题标题】:Multiple search paths for assemblies not in the GAC when using REGASM & COM使用 REGASM 和 COM 时对不在 GAC 中的程序集的多个搜索路径
【发布时间】:2011-03-14 08:35:27
【问题描述】:

我正在创建一个将为 COM 注册的 .NET 程序集,以便 Microsoft Excel VBA 可以引用它。

程序集引用了一个不在 GAC 中的第三方 .NET 程序集(包含一些有用的类),但是,我的程序集部署有问题,因为第三方程序集的路径不是总是在同一个位置(这取决于用户的语言环境以及最近安装第三方程序集的时间)。

这意味着在部署我的程序集(使用 REGASM)时,根据安装它的系统,REGASM 有时会因为找不到我的程序集对第三方程序集的依赖关系而崩溃。

理想情况下,我希望在我的程序集中使用早期绑定,但如果我这样做并且第三方程序集的路径与 Visual Studio 中的引用不同,那么 REGASM 将失败。

我意识到“复制本地”(在 VS 中)可以解决这个问题,但是由于有时会修补第三方程序集,所以我真的不希望将它的过时版本保留在与我的文件夹相同的文件夹中组装。

有没有办法让我不必使用“复制本地”?我想我可以使用第三方程序集的某种动态加载,但仍然可以使用早期绑定? (并且 REGASM 会起作用吗?)

【问题讨论】:

    标签: .net com interop assembly-resolution


    【解决方案1】:

    为什么不在第一次使用时使用“复制本地”,并在应用程序启动时设置一个例程,该例程会遍历新版本可能所在的位置列表并覆盖(或在无法访问时安排覆盖等)如果可能的话,本地程序集。

    此外,您可能希望为用户提供一个选项,以手动设置应打开 dll 的位置,然后您始终(或按需)检查更新版本。

    另一个方面是,如果您的应用程序的功能依赖于某个版本,您为什么要更新新程序集,因为如果他们更改了功能或他们修改了什么,您的程序将因更新而失败,只是一个想法。

    【讨论】:

      猜你喜欢
      • 2019-02-20
      • 1970-01-01
      • 2012-12-06
      • 1970-01-01
      • 1970-01-01
      • 2010-10-25
      • 2019-09-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多