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
” 。