我是否必须强迫我的客户安装Office Xxxx主互操作组件?

时间:2008-12-31 14:46:53

标签: ms-office

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

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

现在似乎为了运行我的应用程序,它需要Office Interop代码,该代码包含在程序集中。

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

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

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

3 个答案:

答案 0 :(得分: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是必需的。通过托管代码自动化Office 95是我以前没有做过的事情,但我可以想象你直接引用了类型库,因此为你生成了RCW并且与PIA无关。

HTH

非洲科尔比(MSFT)

答案 1 :(得分:2)

根据我自己的经验:

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

我认为如果您的基准版本是Office 2000,情况大致相同 - 虽然我没有尝试过,我相信微软自己提供PIA的最早版本是Office 2002(XP)。

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

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

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

XCOPY部署?是的,我也喜欢这样 - 但是忘记了。首先,如果您的加载项将以“高”安全模式运行,那么您将需要一个代码签名的COM“shim”来放置在您的代码和Office之间,并且需要进行注册。我相信VSTO提供了自己的垫片,如果你选择走这条路(我没有,因为我需要能够'从头开始'驱动'Office而不是依赖用户启动应用程序。)

部署 - 处理安装和处理安全问题 - 使用.NET进行Office加载项开发最困难的部分之一,当你认为自己已经完成时,它就是最终的结果。

强烈建议是为了节省数天和数周的麻烦,并查看Add-in Express。我自己最近才遇到过这种情况,因为它可以为我节省很多时间。它有几个我认为对你有用的好处:

  1. 它允许您创建一个单独的加载项,将Office 2000定位到Office 2007(抱歉,而不是'95),无论您在开发PC上遇到什么版本。
  2. 它会为您创建一个安装程序(甚至适用于Vista!),这本身就是物有所值。
  3. 它带有自己的COM垫片,并且在不需要担心的情​​况下进行集成。
  4. 它允许您拥有一个加载项,该加载项在2003年的Office版本中具有菜单/工具栏界面,但在2007年是一个功能区界面。
  5. 请注意,我与Add-in Express没有任何关系(除了作为最近的客户),但同样我还没有将我的项目转换为使用它。我所做的初步测试让我相信它非常好 - 并且绝对是中小型项目的方式。

答案 2 :(得分:0)

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

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

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

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