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

Zap*_*ica 46 office-interop office-2013 visual-studio-2013

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

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

现在我想知道的是.

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

Han*_*ant 122

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

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

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

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

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

请注意,您必须对代码进行少量修改才能使其正常工作.合成的" XxxxClass"类没有嵌入,只是" Xxxx"接口.只需从新陈述中删除" Class" 一词即可.

  • 我对此答案的唯一反对意见是PIA for Office 2013仍然发布 - 例如,如果您安装了VS2013,您将在C:\ Program Files(x86)\ Microsoft Visual Studio 12.0\Visual Studio Tools for Office中找到它们PIA\Office15 (2认同)
  • 只需阅读答案,"请注意功能丢失". (2认同)

Rob*_*Rob 5

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