我正在使用两台计算机,一台安装了 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.Excel
Interop.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 引用是否有任何缺点。可以?