【问题标题】:Compiling .NET component that uses a non specific required version of a 3rd Party Vendor component编译使用非特定必需版本的 3rd 方供应商组件的 .NET 组件
【发布时间】:2010-06-08 23:08:05
【问题描述】:

如果有人要开发依赖于供应商 DLL 的非特定版本的 .NET 组件 - 假设它与 My3rdPartyComponent.dll 一起工作,这是一个 .NET 程序集,但哪个版本并不重要。

在这个组件中找到的一些类实例需要传递到我的组件中。开发人员会引用我的组件 dll,但无法访问源代码。

基本上,我希望能够要求用户将 3rdPartyComponent.MyClass 的实例传递给我的组件函数,但我不在乎它是否是第 3 方 dll 的 1.1、2.2、2.23.980 等版本。

有没有办法在输入我想要传递给组件的参数的同时执行此操作?我不想使用 Object 作为参考。

在我的组件项目中,我可以在程序集引用上指定 SpecificVersion=True。这会解决我的问题,还是会有其他我没有看到的“dll 地狱”问题需要处理?

【问题讨论】:

    标签: visual-studio reference assembly-resolution dll


    【解决方案1】:

    基本上,不,你不能做你想做的事(至少据我所知不是)。 .NET 版本控制的整个前提是程序集的不同版本是不同的程序集。因此,就 .NET 而言,3rdPartyComponent.MyClass 版本 1.1 与3rdPartyComponent.MyClass 版本 1.1.1 完全不同。无论好坏,这就是它的工作原理。

    如果您无法控制第三方程序集,那么您可以支持它的唯一方法是使用反射。 .NET 4 中的 dynamic 类型应该让它变得相当容易 - 但它仍然是一个 hack,如果界面发生最轻微的变化(当然,这是版本控制的重点),它就会失败。

    如果您对该程序集有一定的控制权,则可以将一些接口提取到一个单独的程序集中,该程序集很少有任何重大更改,因此其版本几乎永远不会改变。然后,您可以从该程序集中引用接口而不是具体类。

    【讨论】:

      猜你喜欢
      • 2021-11-11
      • 1970-01-01
      • 2010-10-22
      • 2014-10-05
      • 1970-01-01
      • 1970-01-01
      • 2016-01-30
      • 2017-09-28
      相关资源
      最近更新 更多