5

我正在使用两台计算机,一台安装了 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 Object Library”),因为“Embed Interop Type”属性设置为 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 的答案,但它帮助我想到了在“程序集”选项卡中添加 PIA 引用,而不是在 COM 选项卡中,并且仍然将Embed Interop Type属性设置为 true。这实际上似乎有效,但我不确定不使用 COM 引用是否有任何缺点。可以?

4

1 回答 1

3

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

于 2018-06-02T01:26:29.597 回答