我想根据客户计算机上安装的 Office 版本使用两个不同的 Microsoft.Office.Interop 程序集(版本 11 和 12)。
我已经能够将这两个组件添加到我的项目中(我在本地使用它们 - 它们在我的 bin 文件夹中,在两个不同的子文件夹中),我在这个组件上使用了别名以便能够同时使用它们在我的项目中(别名分别是Excel11和Excel12)。
但不幸的是,当我尝试构建解决方案时,我收到了警告:
No way to resolve conflict between "Microsoft.Office.Interop.Excel, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" and "Microsoft.Office.Interop.Excel, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c". Choosing "Microsoft.Office.Interop.Excel, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" arbitrarily.
最佳答案
是的,这很恶心,但可以理解。我强烈建议查看用于无 COM 生成的 Open XML SDK。但我理解时间紧迫和其他要求,所以如果你不能...这就是我会做的。
为了确保在同一页面上,这是我正在考虑的别名 http://www.dotnetperls.com/extern如果由于某些奇怪的原因对您不起作用,您可以使用下面的另一种方法。
为了清洁,您可以创建几个新项目。一个用于您需要实现的每个版本,将它们命名为特定于版本的名称,例如 Excel11、Excel12。
然后为您希望能够从每个函数访问的函数构建包装类,您可以花哨的方式在您的包装类扩展的单独公共(public)项目中构建一个抽象类,这样您就可以从您的 main 中引用它们代码由抽象类名统一。您只需要在主项目中添加对新项目的引用,并根据检查版本、注册表项或其他方式选择所需的包装器。希望对您有所帮助。
关于c# - 如何在一个项目中使用两个不同的 Microsoft Interop 程序集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1372068/