如果有人要开发一个依赖于非特定版本的供应商DLL的.NET组件 - 假设它与My3rdPartyComponent.dll一起使用,这是一个.NET程序集,但它与哪个版本无关。
此组件中找到的某些类实例需要传递到我的组件中。开发人员将引用我的组件dll但无法访问源代码。
基本上,我希望能够要求用户将3rdPartyComponent.MyClass的实例传递给我的组件函数,但我不在乎它是否是第三方dll的版本1.1,2.2,2.29.980等。
有没有办法在键入我希望传递给我的组件的参数时执行此操作?我不想使用Object作为参考。
在我的组件项目中,我可以在程序集引用上指定SpecificVersion = True。这会解决我的问题,还是会有其他“地狱”问题要处理,我没有看到?
答案 0 :(得分:0)
基本上,不,你不能做你想做的事(至少不是我的知识)。 .NET版本控制的整个前提是不同版本的程序集是不同的程序集。因此,3rdPartyComponent.MyClass
版本1.1与3rdPartyComponent.MyClass
版 1.1.1 完全不同,就.NET而言。无论好坏,这就是它的工作原理。
如果您无法控制第三方程序集,那么您唯一可以支持的方法就是使用Reflection。 .NET 4中的dynamic
类型应该会让它变得相当容易 - 但它仍然是一个黑客攻击,如果界面以最轻微的方式发生变化(当然,这是版本控制的整个过程),它将会失败。
如果您对该程序集有一些控制权,则可以将一些接口提取到一个很少有任何重大更改的单独程序集中,因此它的版本几乎不会更改。然后,您可以从该程序集引用接口而不是具体类。