VSTO Document-level solution的部署问题

参考:

1. Deploying aVisual Studio 2010 Tools for Office Solution Using Windows Installer

2. How do you assign the Assembly Location of an Excel VSTO Installation

3. Walkthrough: Deploying a Document-Level Customization Using a WindowsInstaller File

 

我遇到的问题:

1. 最开始参考这个帖子,编译完直接将debug下的相关文件拷贝到另一台机器上,双击*.vsto安装。安装成功后,该目录下的excel文件就可以正常显示运行。但当我把excel文件复制到桌面(更方便用户使用),发现打开后提示无法安装*.vsto,如图。它去桌面找vsto文件了,当然找不到。。。

 

2. 我的solution是模板文件,每次打开默认新建一个文档的,其实也是为了方便用户在使用完后另存当次的数据,不要随意修改模板。然而我另存为xlsx后双击打开,如果xlsx文件没有在*.vsto同目录下,也会出现上面的问题。

分析:

上面的两个问题,根本原因还是excel文件找不到vsto的安装路径。虽然执行了“安装步骤”且貌似成功,在控制面板/程序列表中也找得到,但似乎excel文件还是无法得到这个路径。在这个网页中找到这样一句话:

“When you build adocument-level project, Visual Studio adds two custom properties to thedocument in the project: _AssemblyLocation and_AssemblyName. When auser opens a document, the Microsoft Office application checks for these customdocument properties. If they exist in the document, the application loads theVisual Studio Tools for Office runtime, which starts the customization. ”

 

意思就是说,document-level的vsto项目,有两个属性_AssemblyLocation 和_AssemblyName,存储了定制化部分的信息(就是用vsto里编写的那些功能),当打开文档时,Office会检查这两个属性的值并启动相应的vsto。
对于任意一个excel文档,怎么查看这两个属性的值呢?可以打开文档后,在File-Info页面的右半边,点开Properties的下拉箭头,点击AdvancedProperties-Cutoms页。如果定义过属性的值,则会看到如下界面,否则Properties就是空的。所以,如果_AssemblyLocation 正确指向了我们安装vsto的路径,不论这个文档放到本机什么位置或者另存的文件,都是可以正确打开并加载的。

 

而事实上,直接编译vsto项目生成的xltm文件是没有上面的属性的,因此也就造成上面的问题。

解决办法:

制作installer安装程序,让用户选择安装路径,并自动设置_AssemblyLocation值。参考开头部分的第3个链接,虽然是Office2003版本,但基本上是一样的(链接1说的更详细,但是不完整,可以两篇结合着看)。按照文中说的步骤,先后创建setup项目和custom action项目,并进行配置。我的环境是Office2010+VS2010,不一样及需要注意的有以下几个地方:

·          “add the document and assembly to theSetup project”步骤中的第9点,要exclue除,net framework 之外的dll。这个说法不准确!特别是当你的项目引用了其它一些第三方库的时候,我的理解是:如果是微软的库,可以保留.netframework和utilities.dll后缀的文件,其余exclude;第三方库,一律保留。参考下面的图:


·          Custom actions的cs文件怎么写? 链接3的代码片段是基于Office2003的,好几个类都无效了。链接2提供的下载链接貌似也无效。参考链接2的帖子,记得把class名字改成自己定义的。同时在Reference里加入Microsoft.VisualStudio.Tools.Applications.Runtime和Microsoft.VisualStudio.Tools.Applications.ServerDocument。

 

按上述步骤生成了setup.exe。运行安装后,打开安装目录下的excel文件,就可以看到_AssemblyLocation and_AssemblyName都赋了正确的值。这样不论文件拷到哪都可以正常打开了。Done!

 

当然,对于document-level的文档,如何跨机器使用,目前还没有找到有效方法。

 


©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值