使用相同程序集的不同版本

问题描述:

我有一个项目,我同时必须使用ActiveReports 2和ActiveReports 6中内置的报告。总的来说,它工作正常,但一些辅助程序集使用相同的名称。例如,为了能够导出为PDF,两个版本都使用名为ActiveReports.PdfExport.dll的程序集。当然,相应的组件是不同的。使用相同程序集的不同版本

请注意,我不直接访问ActiveReports.PdfExport.dll - 这是由ActiveReports运行时处理的。

我找不到一种方法将它们都包含到项目中。有没有办法? GAC是答案吗?

如果您有类型名称冲突,则为每个组件创建单独的external aliases将有所帮助。对于程序集名称冲突,请看ILMerge;你可以将所有相关的程序集合在一起您将创建一个ActiveReports 2的程序集,该程序集将其所有必需的程序集和ActiveReports 6的程序集组合在一起。

是的,您必须将两者都放入GAC(这是它的用途,以防客户端组件)。

我的想法:创建两个库helper,引用每个适当的程序集,将它们注册到某种工厂或管理器中,并在需要时调用特定的一个。

GAC是一种方式,但Fusion解决方案具有很大的灵活性,可能就足够了。 Fusion将在BaseDirectory中探测程序集名称。[DLL | EXE]。如果没有找到它,它将探测BaseDirectory \ Name。[DLL | EXE] \ Name。[DLL | EXE]。因此,您可能可以在Bin文件夹中创建一个名为ActiveReports.PdfExport.DLL的文件夹,并在其中转储旧版本的文件。