如何在一个项目中使用两个不同的Microsoft Interop程序集?

5 .net c# assemblies conflict

我想使用两个不同的Microsoft.Office.Interop程序集(版本11和12),具体取决于客户计算机上安装的Office版本.

我已经能够将这两个组件添加到我的项目中(我使用它们是loccaly - 它们位于我的bin文件夹中,位于两个不同的子文件夹中),我在这个程序集上使用了别名,以便能够在我的项目中使用它们(别名分别是Excel11和Excel12).

但不幸的是,当我尝试构建解决方案时,我会收到警告:

无法解决"Microsoft.Office.Interop.Excel,Version = 12.0.0.0,Culture = neutral,PublicKeyToken = 71e9bce111e9429c"和"Microsoft.Office.Interop.Excel,Version = 11.0.0.0,Culture = neutral,PublicKeyToken"之间的冲突= 71e9bce111e9429c".任意选择"Microsoft.Office.Interop.Excel,Version = 12.0.0.0,Culture = neutral,PublicKeyToken = 71e9bce111e9429c".

Mab*_*lah -1

是的,这很恶心,但可以理解。我强烈建议研究 Open XML SDK 以实现无 COM 生成。但我了解时间紧迫和其他要求,所以如果你不能......这就是我会做的。

为了确保在同一页面上,这就是我正在考虑的别名http://www.dotnetperls.com/extern如果由于某些奇怪的原因不适合您,那么您可以使用下面的另一种方法。

为了保持清洁,您可以创建几个新项目。您需要实现的每个版本都有一个,将它们命名为特定版本,例如 Excel11、Excel12。

然后为您希望能够从每个函数访问的函数构建包装类,您可以在包装类扩展的单独公共项目中构建一个抽象类,这样您就可以从主代码中通用地引用它们为了统一的抽象类名。您只需在主项目中添加对新项目的引用,然后根据检查版本、注册表项或其他方式选择所需的包装器。希望能帮助到你。