我还可以在office 2013中使用Microsoft.Office.Interop程序集吗?

时间:2014-01-09 07:17:10

标签: visual-studio-2013 office-interop office-2013

我不得不将旧项目(在.Net 2中)导入Visual Studio 2013,它使用了Microsoft主互操作程序集。

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

现在我想知道的是。

  1. 我可以将它与Office 2013一起使用并向后兼容吗?
  2. 如果是这样,这是一条走向未来的好路线?它会兼容吗?因为我发现你需要.Net 2(最迟),Windows 8附带4.5而不是3(默认情况下),并且大多数新计算机都将使用Office 2012或2013.

5 个答案:

答案 0 :(得分:120)

PIA是一种历史工件,只有旧的.NET版本(v4之前)才需要。它们被“嵌入互操作类型”功能彻底而优雅地取代,也被称为“无PIA”功能。自Visual Studio 2010以来支持,在选择引用程序集时,您将在“属性”窗口中找到它。它默认为True。一个涵盖基础技术的好视频是available here

微软不发布Office 2013 PIA的原因是,他们希望您嵌入互操作类型。

该功能非常理想,它可以避免您的客户必须在他的机器上安装PIA,并让您将它们包含在您的安装程序中。在没有照顾它的情况下解决问题,这是一个完全太常见的事故。此外,Office的PIA非常大,嵌入互操作类型的巨大优势是您的程序集只包含您实际使用的类型。许多兆字节减少到几千字节。

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

请注意,某项功能已丢失,故意针对您在开发计算机上实际未安装的旧版Office更加困难。如果这是一个要求,那么您仍然需要该版本的PIA,在“属性”窗口中强制将“嵌入互操作类型”设置为“真”。实际上这样做是值得怀疑的,微软很难保持新的Office版本与旧版本完全兼容。他们已经保持了15年,但它已经失去了动力。最糟糕的情况是针对比您在计算机上安装的版本更新的版本,这可能会导致程序崩溃,非常难以诊断AccessViolationException之类的异常。

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

答案 1 :(得分:4)

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

官方认为PIA for Office没有向后兼容性。实际上它有效。

出于向后兼容性的原因,我使用PIA for Office XP已有好几年了,它适用于Office XP,2003年,2007年和2010年(尚未经过2013年测试)以及Windows XP,Vista,7和8。

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

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

答案 4 :(得分:0)

我刚刚发现Visual Studio 2013 express已不再拥有办公室支持。所以你至少需要亲版本来使它工作。