5

似乎如果您尝试引用 Office COM 对象(就像您在其他开发环境中所做的那样),Visual Studio 会出错 -它只是无法工作

所以你必须使用微软手工转换并提供下载下载下载的转换类型库。

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

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

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

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

4

3 回答 3

4

这是一个常见的问题,答案相当复杂。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 无关。

高温高压

科尔比非洲 (MSFT)

于 2008-12-31T15:14:59.360 回答
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 插件开发中最困难的部分之一,当您认为自己已经完成时,它会在最后出现,这是一个真正的挑战。

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

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

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

于 2009-05-21T17:08:51.810 回答
0

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

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

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

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

于 2009-05-21T16:08:01.917 回答