看起来如果您尝试引用Office COM对象(就像在其他开发环境中那样),Visual Studio会出错 - and it just won't work。
因此,您必须使用Microsoft手动转换并转换为download,download和download的转换后的类型库。
现在似乎为了运行我的应用程序,它需要Office Interop代码,该代码包含在程序集中。
现在,我不想强迫我的客户安装Office 2007主互操作程序集,Office 2003主互操作程序集或Office XP主互操作程序集。我想要一个xcopy部署。
如果我设法获得微软的互操作程序集副本,我可以将它们复制到Bin / Debug和Bin / Release文件夹吗?
如果我包含Office 2007互操作程序集,如果客户安装了Office 95,它是否可以工作,或者我是否必须包含Microsoft已发布的Office Interop dll的所有版本?
答案 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。我自己最近才遇到过这种情况,因为它可以为我节省很多时间。它有几个我认为对你有用的好处:
请注意,我与Add-in Express没有任何关系(除了作为最近的客户),但同样我还没有将我的项目转换为使用它。我所做的初步测试让我相信它非常好 - 并且绝对是中小型项目的方式。
答案 2 :(得分:0)
如果我设法获得微软的互操作程序集副本,我可以将它们复制到Bin / Debug和Bin / Release文件夹吗?
它对我有用。当我编译程序时,我将它引用到bin中的interop(PIA)dll,然后以这种方式部署到客户。
如果我包含Office 2007互操作程序集,如果客户安装了Office 95,它会工作吗?
不,您拥有所针对的Word版本的互操作dll。我想有可能编写你的代码,以便它在该机器上运行的单词版本,并在运行时选择正确的互操作,但你需要将它们全部包含在内。