我不得不将一个较旧的项目(在.Net2中)导入到Visual Studio2013中,它使用了Microsoft主互操作程序集。

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

现在我想知道的是。

  1. 我可以让它与office2013一起工作并向后兼容吗?
  2. 如果是这样,这是一条通往未来的好路线吗?它会兼容吗?因为我看到你需要 .Net 2 (最迟)和Windows8附带4.5而不是3(默认情况下),大多数新计算机都将拥有Office2012或2013。
有帮助吗?

解决方案

PIAs是一个历史工件,只有旧的.NET版本(v4之前)才需要。它们已被"嵌入互操作类型"功能(也称为"无PIA"功能)彻底而优雅地取代。从Visualstudio2010开始支持,当您选择引用程序集时,您将在属性窗口中找到它。它默认为 True.一个涵盖底层技术的好视频是 可在此下载.

这就是Microsoft不发布Office2013的Pia的原因,他们希望您嵌入互操作类型。

该功能是非常可取的,它避免了您的客户必须在他的机器上安装PIAs,并为您包括他们与您的安装程序。解决这个问题时,既不照顾它,一个完全太常见的事故。此外,Office的PIAs非常大,嵌入互操作类型的巨大优势是您的程序集只包含您实际使用的类型。许多兆字节减少到几千字节。

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

请注意,一个功能丢失了,故意瞄准一个旧版本的Office,你实际上没有安装在你的开发机器上是更困难的。如果这是一个要求,那么您仍然需要该版本的PIAs,强制嵌入互操作类型为True在属性窗口。实际上这样做是值得怀疑的,微软很难保持新的Office版本与旧版本完全兼容。他们已经保持了15年,但它已经没有动力了。最坏的情况是针对比您安装在计算机上的新版本,这可能会使您的程序崩溃 非常 很难诊断异常,如 AccessViolationException.

请注意,您必须对代码进行小修改才能使其工作。合成"XxxxClass"类不是嵌入的,只是"Xxxx"接口。只需删除单词"Class"从 新的 声明。

其他提示

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

此外,如果您现在还不知道,Windows8确实有旧版本的.NET Framework,但默认情况下未安装它们。转到Program Features--->Add features to Windows---->第一个复选框应该是.NET3.0,也许是2.0。请注意,如果您在WSUS服务器上,则需要告诉Windows从Windows Update服务器抓取文件。希望有帮助!

正式而言,Office的pia没有向后兼容性。事实上,它的工作原理。

由于向后兼容性的原因,我使用Pia的Office XP,因为几年,它工作正常与Office XP,2003年,2007年和2010年(尚未与2013年测试),并在Windows XP,Vista中,7和8。

为了与不同版本的Windows兼容,<URL>framework3.5。

为了未来。..这取决于你用PIA做什么。如果可能的话,直接处理Open XML文件或为word/excel创建外接程序要好得多。

我刚刚发现Visual Studio2013express不再支持office。所以你至少需要pro版本才能使其工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top