【问题标题】:Do i have to force my customers to install the Office Xxxx Primary Interop Assemblies?我是否必须强制我的客户安装 Office Xxxx Primary Interop Assemblies?
【发布时间】:2010-09-29 00:31:29
【问题描述】:

如果您尝试引用 Office COM 对象(就像您在其他开发环境中所做的那样),Visual Studio 似乎会出错 - and it just won't work

因此,您必须使用 Microsoft 手动转换并为 downloaddownloaddownload 提供的转换类型库。

现在看来,为了让我的应用程序能够运行,它需要 Office 互操作代码,该代码包含在程序集中。

现在我不想强迫我的客户安装 Office 2007 主互操作程序集、Office 2003 主互操作程序集或 Office XP 主互操作程序集。我想要一个 xcopy 部署。

如果我设法获得 Microsoft 的互操作程序集副本,我可以将它们复制到 Bin/Debug 和 Bin/Release 文件夹吗?

如果我包含 Office 2007 互操作程序集,如果客户安装了 Office 95,它是否可以工作,还是我必须包含 Microsoft 曾经发布的所有版本的 Office Interop dll?

【问题讨论】:

    标签: ms-office


    【解决方案1】:

    这是一个常见问题,答案相当复杂。 MSFT 的 Mary Lee 是一个很好的资源,可以提供这方面的信息:

    http://blogs.msdn.com/vsto/archive/tags/Deployment/default.aspx

    使用 ClickOnce 进行部署是最接近基于 VSTO 构建的任何应用程序的 XCopy 安装。

    另外,请查看此帖子:

    http://social.msdn.microsoft.com/Forums/en-US/vsto/thread/1666d2b0-a4d0-41e8-ad86-5eab3542de1e/

    最后,Misha 有一个很棒的博客:

    http://blogs.msdn.com/mshneer/archive/2006/01/05/deployment-articles.aspx

    PIA 特定于您所针对的 Office 版本,因此 2003 PIA 是针对 2003 所必需的,而 2007 PIA 是 2007 所必需的。通过托管代码自动化 Office 95 是我以前没有做过的事情,但我可以想象您是直接引用类型库,因此会为您生成一个 RCW,与 PIA 无关。

    HTH

    科尔比非洲 (MSFT)

    【讨论】:

      【解决方案2】:

      根据我自己的经验:

      如果您想以 Office 2003 及更高版本为目标,那么您将使用 Office 2003 PIA - 并将自己限制为 Office 2003 API。代码将在 Office 2003 或更高版本上运行。您仍然可以使用反射调用 Office 2007 函数,但这并不令人愉快。

      我想如果您的基准版本是 Office 2000,情况大致相同 - 尽管我没有尝试过,而且我相信 Microsoft 自己提供 PIA 的最早版本是 Office 2002 (XP)。

      您可以为 2000 年创建自己的 Interop 程序集,我没有理由相信您不能在 95 年做到这一点,尽管您是我见过的第一个要求 95 年支持的人!不用说,如果您创建自己的 Interop 程序集,则需要将它们与您的应用程序一起部署。

      在任何情况下,您都希望使用可以使用的最高 Office 版本作为基准,这样您就可以支持尽可能多的功能而无需借助反射。您应该在安装了该版本 Office 的机器上开发代码。

      在我的例子中,我为 Office 2003 开发并且知道我的用户也有 2003。所以,我要求他们确保他们启用了“.NET 可编程性支持”功能(您可以通过 Office 2003 安装程序通过如果您选择更改选项,则添加/删除程序)。该选项基本上将 PIA 安装到 GAC。对于那些不能这样做的用户,我的安装程序会检测到缺少 PIA 并在安装我的应用程序之前安装它们(就像 .NET 框架一样)。

      XCOPY 部署?是的,我也想要那个——但算了吧。一方面,如果您的加载项将在“高”安全模式下工作,那么您将需要一个代码签名的 COM“垫片”来位于您的代码和 Office 之间,并且需要注册。我相信 VSTO 会提供自己的 shim,如果您选择走这条路(我没有,因为我需要能够从头开始“驱动”Office,而不是依赖用户来启动应用程序)。

      部署 - 以及处理安装和安全问题 - 是使用 .NET 进行 Office 插件开发中最困难的部分之一,当您认为自己已经完成时,它会在最后出现,这是一个真正的挑战。

      我的strong建议是省去几天和几周的麻烦,看看Add-in Express。我自己最近才遇到这个问题,从那以后就一直在踢自己,因为它可以为我节省很多时间。它有几个我认为对您有用的好处:

      1. 它允许您创建针对 Office 2000 到 Office 2007(抱歉,不是 '95)的单个加载项,无论您的开发 PC 上碰巧有什么版本。
      2. 它会为您创建一个安装程序(甚至可以在 Vista 上运行!),这本身就是物有所值的。
      3. 它带有自己的 COM 垫片,并且集成到您无需担心的程度。
      4. 它将允许您拥有一个加载项,该加载项在 2003 及之前的 Office 版本中具有菜单/工具栏界面,但在 2007 版本中具有功能区界面。

      请注意,我与 Add-in Express 没有任何隶属关系(除了作为最近的客户),但同样我还没有将我的项目转换为使用它。我所做的初步测试让我相信它非常好 - 绝对适合中小型项目。

      【讨论】:

      • +1 用于提及加载项快递。我想提到的另一点是,您可以创建针对 excel 2000 到 2003 的自定义任务窗格。所有这些都以非常合理的价格进行。您可能想要查看的开源替代品(尽管没有多余的装饰)是 Excel DNA,它也非常好。注意:我不以任何方式隶属于 Add-in express 或 ExcelDNA 项目(除了同时使用它们)
      【解决方案3】:

      如果我设法获得 Microsoft 的互操作程序集副本,我可以将它们复制到 Bin/Debug 和 Bin/Release 文件夹吗?

      它对我有用。当我编译程序时,我让它引用 bin 中的互操作 (PIA) dll,然后以这种方式将其部署给客户。

      如果我包含 Office 2007 互操作程序集,如果客户安装了 Office 95,它会工作吗?

      不,您必须拥有您所针对的 Word 版本的互操作 dll。我想可能可以编写您的代码,以便它检查该机器上运行的单词版本并在运行时选择正确的互操作,但您需要将它们全部包含在内。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-22
        • 1970-01-01
        • 2017-12-24
        • 2020-01-18
        • 2019-01-17
        • 1970-01-01
        • 2014-04-26
        • 2016-12-19
        相关资源
        最近更新 更多