如果另一个应用程序的 bin 目录中的 .net 程序集不在 GAC 中,如何使用该程序集?



我正在开发一个托管c++应用程序,它将与另一家公司的产品接口。他们的产品是基于。net的,使用的主要API来自。net程序集foo.dll。

我的应用程序需要先安装他们的产品。安装它们的产品会产生三个不同的应用程序,每个应用程序都在自己的目录中,每个应用程序都有自己的/bin目录,每个应用程序都有相同的.dll文件的本地副本,因此您可以找到:

C:companyproduct1binfoo.dll  
C:companyproduct2binfoo.dll  
C:companyproduct3binfoo.dll  

当你安装他们的产品时,公司告诉我们要使用哪些。dll,哪些没有放在GAC中。目前,我可以通过在构建后将它们的.dll复制到我的bin目录来运行我的应用程序。现在我希望为我的产品创建一个安装程序,但是,我很难找到一种优雅的方法来处理这个问题。假设他们的API没有改变,我应该能够针对他们产品的大多数版本运行,只要我拥有的.dll与他们的产品在那台机器上使用的。

显然,理想的解决方案是当您安装他们的产品时,他们将这些程序集放在GAC中,特别是因为他们自己共享它们,但这不太可能发生,因为他们的产品仍然不成熟,有许多更重要的问题,他们所做的对他们有效。

所以我留下的问题是如何找到和使用。dll我需要当我安装我的产品。到目前为止,我想到的选项如下:

  1. 在我的安装程序中包含他们的.dll

    • 糟糕,因为这将我锁定在他们的软件的特定构建中,并且我们无论如何都会从他们那里获得增量开发构建,这与他们的公开发布不匹配。
  2. 让我的安装程序找到他们的安装目录并运行gacutil.exe和其他任何需要将。dll放入GAC。

    • 不好,因为gacutil.exe只应该用于开发,这意味着我们必须将它包含在我们的安装程序中,并将其与我们自己的产品一起安装。它还可能干扰他们的产品找到组件。
  3. 让我的安装程序找到他们的安装目录,并复制我需要的。dll到我自己的目录。

      简单,它工作,但不美观,这意味着我的应用程序可能会崩溃,如果他们的产品有一个小的更新,直到新的。dll被复制过来。我还想避免需要复制文件。
  4. 使用我在http://www.roelvanlisdonk.nl/?p=713找到的代码,在运行时以编程方式将它们的安装目录添加到我的应用程序的。net搜索路径中。

    • 如果它可以工作的话,相当简单,但是需要维护更多的代码。到目前为止,这似乎是自动从目录加载dll的唯一途径。

Managed c++和。net对我来说还是比较新的,我的大部分代码都是基于linux的c++编写的。我的感觉是,这将是非常困难的,因为其他公司没有正确地管理他们如何使用他们的。net程序集,如果他们想让其他人能够开发他们。

有没有更有经验的人遇到过这样的事情并找到了解决办法?

也许你可以解决这个问题,使符号链接到。dll的问题?这样,你的应用程序将能够看到和使用这些文件,而你正在使用它们在磁盘上的物理文件。如果他们更新了文件(纠正了一些错误),但仍然向后兼容,你将能够自动使用他们的新代码/.dll。

这里的主要问题是,如果有问题的程序集意味着从其他应用程序使用?他们的API是否稳定?如果没有,基本上你什么也做不了。

另外,如果你将它们的目录添加到程序集搜索加载路径中,你可能会无意地加载错误的程序集,因为将来可能会有多个名为x.d dll的程序集。

相关内容

  • 没有找到相关文章

最新更新