添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

dll部署

ClickOnce部署很方便,但是没有版本倒退的功能。在实际的项目中,插件版本往往和数据版本有关联的,切换到指定的svn或git版本,希望也能有对应版本的插件功能。
以svn版本控制为例,说明怎么使用dll部署。

插件本体项目

仍然采用ClickOnce部署的方式,不过可以不填远程Url,因为不存在插件更新的情况;界面及功能采用Dll的方式书写

Dll项目创建

创建一个Net Framework类库


引入相关引用;将正常的VSTO项目中的引用都添加进来


创建绘制的函数(从VSTO设计器产生的函数直接复制过来就行)

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;

using Microsoft.Office.Tools.Ribbon;

namespace ClassLibrary1
{
public static class Class1
{
/// <summary>
/// 绘制tab,返回提供给VSTO使用
/// </summary>
/// <param name=“factory”></param>
/// <returns></returns>
public static RibbonTab DrawTab(RibbonFactory factory)
{
RibbonTab tab1 = factory.CreateRibbonTab();
RibbonGroup group1 = factory.CreateRibbonGroup();
tab1.SuspendLayout();

         tab1.ControlId.ControlIdType = Microsoft.Office.Tools.Ribbon.RibbonControlIdType.Office;
         tab1.Groups.Add(group1);
         tab1.Label = "TabAddIns";
         tab1.Name = "tab1";
         group1.Label = "group1";
         group1.Name = "group1";
         tab1.ResumeLayout(false);
         tab1.PerformLayout();
         return tab1;

VSTO项目中的功能区代码略作调整
设计器产生代码
修改前

 private void InitializeComponent()
     this.tab1 = this.Factory.CreateRibbonTab();
     this.group1 = this.Factory.CreateRibbonGroup();
     this.tab1.SuspendLayout();
     this.SuspendLayout();
     // tab1
     this.tab1.ControlId.ControlIdType = Microsoft.Office.Tools.Ribbon.RibbonControlIdType.Office;
     this.tab1.Groups.Add(this.group1);
     this.tab1.Label = "TabAddIns";
     this.tab1.Name = "tab1";
     // group1
     this.group1.Label = "group1";
     this.group1.Name = "group1";
     // Ribbon1
     this.Name = "Ribbon1";
     this.RibbonType = "Microsoft.Excel.Workbook";
     this.Tabs.Add(this.tab1);
     this.Load += new Microsoft.Office.Tools.Ribbon.RibbonUIEventHandler(this.Ribbon1_Load);
     this.tab1.ResumeLayout(false);
     this.tab1.PerformLayout();
     this.ResumeLayout(false);
 private void InitializeComponent()
     this.SuspendLayout();
 // 根据dll获取函数,产生tab
 Assembly assembly = Assembly.LoadFrom("XXX/test.dll");
 Type type = assembly.GetType("ClassLibrary1.Class1");
 MethodInfo methodInfo = type.GetMethod("DrawTab",
     BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Static
 this.tab1 = (RibbonTab)methodInfo.Invoke(null, new[] { this.Factory });
 this.Name = "Ribbon1";
 this.RibbonType = "Microsoft.Excel.Workbook";
 this.Tabs.Add(this.tab1);
 this.ResumeLayout(false);

这样在打开插件之后,会根据dll自动获取绘制函数,从而实现根据dll的内容更新插件。

不同用户,机子上dll的路径可能不同,怎么获取?
可以要求用户首次使用的时候,执行一个.bat,让用户输入自己的svn项目路径,然后根据svn路径和相对路径,拼出来dll的路径。

ClickOnce部署

该方案使用了一个文件服务器用来访问部署文件。(后以www.example.com/Files作为示例地址)

使用VS模板,创建一个Excel AddIn项目(在其中填充你想要的功能,此处略过不提)


右键项目,打开属性界面


选中发布页签,进行设置并点击发布


发布后的文件复制到文件服务器的目录下即可


用户从对应URL下载Setup.exe进行安装即可;后续也会自动从对应URL拉取更新的

问题
如果出现从不信任的位置或来源安装的报错,导致无法进行安装,可以直接采用信任证书的方式安装
右键下载下来的Setup.exe,找到证书进行安装


原因:发布的软件都有证书,在属性界面的签名页签里进行设置。默认使用的是测试证书,用户机器不信任。需要手动安装信任下才可以正常。
后续不更改证书,就不用重新信任了

VSTO自动更新部署方案 VSTO部署安装有两种形式,一是ClickOnce的web安装,二是单机的msi包安装,每种安装方式有区分外接程序和Office文档安装。 一、ClickOnce的在线Web安装 此方法可以自动更新,打开excel程序或文档将自动更新;不需要修改编译DLL的版本号;Excel工作簿修改后,需要生成后再次添加,还需要重新签名。 1.创建VSTO外接程序的ClickOnce安装包 2.创建VSTO工作簿的ClickOnce安装包 二、Msi安装包的单机安装 此方法无法自动更新,更新需要安装新版本安 Excel的显示内容和实际输入内容不是一回事,相信广大Excel表哥、表姐都对其有所认识,一般的基础的Excel教程必讲的部分就有Excel的数字格式设置,Excel本身内置了很多的数字格式供我们选择,但操作过程中,往往来来回回操作好几个界面才能达到自己想要的效果。现以插件的方式,把常用的数字格式提炼出来,供大家一键完成数字格式设置。 文章出处说明 原文在简书上发表,再同... VSTO addin刚接触,对于此类部署没有做过,好在找到一篇很全面的文章。 http://www.cnblogs.com/brooks-dotnet/archive/2011/11/04/2236609.html VSTO addin 部署大致归纳一下,主要有以下一些情况: 1、Office版本不同 目前主要有Office 2003、Office 2007、Office 2010。 因Excel催化剂用了VSTO的开发技术,并且为了最好的用户体验,用了Clickonce的布署方式(无需人工干预自动更新,让用户使用如浏览器访问网站一般,永远是最新的内容和功能)。对安装过程有一定的难度要求。仅以此文简单罗列一下,希望能够给广大用户一些实质性的指引(安装成功过Excel催化剂插件或安装成功过其他的VSTO开发的Excel插件,对另外安装其他类似的VSTO插件将会非常容... 项目进行的过程中有幸被分到自己从没接触过的新技术——程序更新。初次相遇有些迷茫更多的是一份期待,本着先了解技术大致的发展现状和一些特定的技术名词再从简单易实现处使用做起,我带来了这次的总结如下: