50

我必须将一个较旧的项目(在 .Net 2 中)导入 Visual Studio 2013,它使用 Microsoft Primary Interop Assemblies。

Visual Studio 说我需要添加对项目的引用。现在我去读了一些书,显然微软只发布了 Office 2010 的 PIA?(我有 Office 2013)

现在我想知道的是。

  1. 我可以让它与 Office 2013 一起使用并向后兼容吗?
  2. 如果是这样,这是一条通往未来的好途径吗?会兼容吗?因为我看到您需要.Net 2(最迟)并且 Windows 8 附带 4.5 而不是 3(默认情况下)并且大多数新计算机都将安装 Office 2012 或 2013。
4

5 回答 5

126

PIA 是一个历史产物,只有旧的 .NET 版本(v4 之前)才需要。它们已被“嵌入互操作类型”功能(也称为“无 PIA”功能)彻底而优雅地取代。自 Visual Studio 2010 起受支持,当您选择参考程序集时,您会在“属性”窗口中找到它。它默认为True. 此处提供了涵盖基础技术的精彩视频。

这就是 Microsoft 不发布 Office 2013 的 PIA 的原因,他们希望您改为嵌入互操作类型。

该功能非常可取,它避免了您的客户必须在他的机器上安装 PIA 并且您将它们包含在您的安装程序中。在双方都不关心的情况下解决问题,这是一个完全太常见的事故。此外,Office 的 PIA 非常大,嵌入互操作类型的最大优势是您的程序集仅包含您实际使用的类型。许多兆字节减少到几千字节。

工作流程略有不同。Microsoft.Office.Interop您现在可以使用 COM 选项卡,而不是在“添加引用”对话框的 .NET Framework 选项卡中添加对程序集的引用。并选择“ Microsoft Excel 15.0 Object Library”来为使用 Excel 的程序生成互操作类型。如果您加载以前使用 PIA 的旧项目,则只需删除这些引用程序集并将它们从 COM 选项卡添加回来。

请注意,某项功能丢失,故意针对您实际上并未在您的开发计算机上安装的旧版 Office 更加困难。如果这是一个要求,那么您仍然需要该版本的 PIA,请在“属性”窗口中强制“嵌入互操作类型”为 True。实际上这样做是有问题的,微软很难让新的 Office 版本与旧版本完全兼容。他们已经坚持了 15 年,但它已经失去了动力。最坏的情况是针对比您机器上安装的版本更新的版本,这很可能使您的程序崩溃,并且很难诊断出异常,例如AccessViolationException.

请注意,您必须对代码进行少量修改才能使其正常工作。合成的“ XxxxClass”类没有嵌入,只有“ Xxxx”接口。只需从新语句中删除单词“ Class” 。

于 2014-01-09T11:05:23.037 回答
5

VS 2015 Community with Office 365 - 无论出于何种原因,从 COM 对象添加都不起作用。解决方案是进入 GAC 并找到互操作程序集,将它们复制到临时目录,然后像任何 DLL 一样添加到您的项目中。

于 2016-09-26T14:58:32.530 回答
1

此外,如果您现在还不知道,Windows 8 确实具有较旧版本的 .NET Framework,但默认情况下并未安装它们。转到程序功能 ---> 向 Windows 添加功能 ----> 第一个复选框应该是 .NET 3.0,也许是 2.0。请注意,如果您在 WSUS 服务器上,则需要告诉 Windows 从 Windows Update 服务器获取文件。希望能帮助到你!

于 2014-07-16T14:28:35.457 回答
0

官方没有 PIA for Office 的向后兼容性。事实上它有效。

出于向后兼容性的原因,我多年来一直在使用 Office XP 的 PIA,它在 Office XP、2003、2007 和 2010(尚未在 2013 中测试)以及 Windows XP、Vista、7 和 8 上都能正常工作。

为了与不同版本的 Windows 兼容,我使用的是 .NET framework 3.5。

对于未来……这取决于您对 PIA 所做的工作。如果可能的话,最好直接处理 Open XML 文件或为 word/excel 创建一个加载项。

于 2014-01-09T09:50:25.160 回答
0

我刚刚发现 Visual Studio 2013 express 不再有办公室支持。因此,您至少需要专业版才能使其正常工作。

于 2015-08-11T11:54:40.007 回答