【发布时间】: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.Excel、Interop.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