在多台开发机器上打开一个引用“MS-Office 对象库”的项目

Ahm*_*eed 5 .net c# pia office-interop visual-studio-2015

我正在使用两台计算机,一台安装了 Office 2010,另一台安装了 Office 2016。第一台是我的主 PC。

假设我在主 PC 上启动了一个项目。如果我添加对以下任何一项的引用:

  • Microsoft.Office.Interop.Word(Microsoft Word 14.0对象库)。
  • Microsoft.Office.Interop.Excel(Microsoft Excel 14.0对象库)。
  • Microsoft.Office.Interop.PowerPoint(Microsoft PowerPoint 14.0对象库)。

..然后在第二台 PC 上打开项目,Visual Studio 将自动为所有项目选择适用的版本(即“Microsoft XXXX 16.0对象库”),因为“嵌入互操作类型”属性设置为 true

到目前为止Microsoft.Office.Core一切顺利,但是当我添加对(Microsoft Office 14.0 Object Library)的引用时,我无法获得相同的行为,即当我在第二台PC上打开项目时,我找到了相同版本的引用(14.0) 标有一个图标,表明参考资料丢失,同时警告告诉我同样的事情(无法找到参考资料)。

显然,如果我删除引用并将其替换为较新的版本 (16.0),则一切正常,除了- 当然 -我将无法再在主 PC 上打开解决方案。

所以,我的问题是:

  • 为什么它不选择相应的版本Microsoft.Office.Core就像发生了什么Interop.ExcelInterop.Word等等?
  • 是否有解决方案,以便我可以在两台计算机之间无缝打开项目?

请注意:

  • 主要关注点不在于最终用户使用不同版本的 Office 运行应用程序(这已经被多次询问和回答)。我关心在安装了不同版本Office的二次开发机器上打开解决方案/项目。

  • 如果相关,这是一个 WinForms 应用程序。


更新:

  • 我尝试将 MSO.DLL 文件复制到本地“lib”文件夹,但每当我将其添加为引用时,它都会显示"C:\Windows\assembly\GAC_MSIL\Office\14.0.0.0__71e9bce111e9429c\Office.dll"为引用的路径。然后,无论我是否禁用/启用该Embed Interop Types属性,它仍然无法在二次开发机器上编译。

  • 虽然我不太确定我是否完全得到了Eugene 的回答,但它让我有了在“程序Embed Interop Type集”选项卡而不是“COM”选项卡中添加 PIA 引用的想法,并且仍然将属性设置为 true。这实际上似乎有效,但我不确定不使用 COM 引用是否有任何缺点。可以?

Eug*_*iev 3

您需要将互操作程序集(Microsoft Word/Excel/PowerPoint/Core 14.0 对象库)复制到解决方案中的本地文件夹。然后您可以将它们添加为引用,以便在两台计算机上都可以访问它们,并且您将能够在两台计算机之间无缝打开项目。