【问题标题】:Open a project referencing "MS-Office Object Library" on multiple development machines在多台开发机器上打开一个引用“MS-Office 对象库”的项目
【发布时间】:2018-11-12 02:31:28
【问题描述】:

我正在使用两台计算机,一台安装了 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 对象库)。

..然后在第二台电脑上打开项目,Visual Studio 会自动为所有项目选择适用的版本(即“Microsoft XXXX 16.0 Object Library”)since "嵌入互操作类型”属性设置为 true

到目前为止一切顺利,但是当我添加对Microsoft.Office.Core(Microsoft Office 14.0 对象库)的引用时,我无法获得相同的行为,即当我在第二台 PC 上打开项目时,我发现具有相同版本 (14.0) 的引用标有一个图标,指示该引用丢失以及警告告诉我同样的事情(找不到该引用)。

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

所以,我的问题是:

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

请注意:

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

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


更新:

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

  • 1234563为真。 这实际上似乎可行,但我不确定不使用 COM 引用是否有任何缺点。是吗?

【问题讨论】:

  • 回答您关于不使用 COM 选项卡添加引用时的缺点的问题:随任何给定 Visual Studio 版本安装的 PIA 将是 Visual Studio 发布时的当前 Office 版本。这些可能与开发机器上安装的 Office 版本不同。 COM 选项卡中的 PIA 将是您指定的 Office 版本。
  • 各个 Office 应用程序的对象模型在 .olb 文件中,而不是在可执行文件中。我没有尤金在这方面的经验,但我认为你只需要复制(和分发)MSO 核心文件,这会给你带来问题......
  • @CindyMeister “对象模型..在 .olb 文件中,而不是在可执行文件中”。我不是 COM 对象和引用它们的专家,所以我可能会误读(误解)这个,但 this is where I got it from。我误会了吗?
  • “您只需要复制(和分发)MSO 核心文件”,我只是尝试将 MSO.DLL 文件复制到本地“lib”文件夹,但无论何时我将其添加为参考,它显示“C:\Windows\assembly\GAC_MSIL\Office\14.0.0.0__71e9bce111e9429c\Office.dll”作为参考的路径。那么,无论我是否禁用/启用Embed Interop Types属性,在二次开发机器上仍然无法编译。
  • 是的,您在“参考”对话框中看到的内容具有误导性。如果您在 Windows 中搜索,您会找到实际的 *.olb 文件。

标签: c# .net visual-studio-2015 office-interop pia


【解决方案1】:

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

【讨论】:

  • 不能将“嵌入互操作类型”属性设置为 true 吗?
  • 您需要重新添加指向本地互操作文件的引用。然后你就可以设置Embed Interop Types属性了。
  • 除了“MS Office Object library”是MSO.DLL文件,其他的“MS XXXX Object library”都是Office程序可执行文件,我需要复制吗那些?
  • 您的回答帮助我产生了尝试其他方法的想法。我实际上并没有在本地复制任何文件。最初,我一直使用 COM 选项卡 as suggested by Hans Passant 中的引用,但现在,我使用了“程序集”选项卡(位于“..\Visual Studio Tools for Office\PIA\Office14”)中的引用。你知道不使用 COM 选项卡中的那些有什么缺点吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-09
  • 1970-01-01
  • 2020-09-13
  • 1970-01-01
相关资源
最近更新 更多