使用REGASM&amp ;;时,不在GAC中的程序集的多个搜索路径COM

时间:2010-07-10 22:23:06

标签: .net com interop assembly-resolution

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

程序集引用了一个不在GAC中的第三方.NET程序集(包含一些有用的类),但是,由于第三方程序集的路径不是,因此部署程序集时遇到问题始终在同一位置(这取决于用户的区域设置以及最近安装第三方程序集的位置)。

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

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

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

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

1 个答案:

答案 0 :(得分:0)

为什么不首次使用'复制本地',并在应用程序启动时有一个例程,该例程通过新版本可能的位置列表并覆盖(或者在不可访问时安排覆盖等)如果可能,当地议会。

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

另一个方面是,如果你的应用程序的功能取决于某个版本,你为什么要更新新的程序集,因为如果他们改变了某个特性,或者他们做了什么,那么你的程序会因为更新而失败,只是一个想法。