首页 > 其他分享 >VSTO自动更新部署方案

VSTO自动更新部署方案

时间:2023-10-11 09:23:07浏览次数:114  
标签:插件 Name 部署 tab1 dll group1 自动更新 using VSTO

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,找到证书进行安装


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

标签:插件,Name,部署,tab1,dll,group1,自动更新,using,VSTO
From: https://www.cnblogs.com/guangzhiruijie/p/17756253.html

相关文章

  • Oracle 简介与 Docker Compose部署
    最近,我翻阅了在之前公司工作时的笔记,偶然发现了一些有关数据库的记录。当初,我们的项目一开始采用的是Oracle数据库,但随着项目需求的变化,我们不得不转向使用SQLServer。值得一提的是,公司之前采用的是Docker技术,所有数据库的部署都是通过DockerCompose来完成的。在今天的文......
  • 不需要服务器,免费且快速部署项目的,只需要一分钟就搞定
    快速搭建且免费的内网穿透工具--ngrok大家好,我是温醉酒一壶,本次想为大家推荐一款非常不错的内网穿透工具ngrok,不时大家都会有疑问为什么需要内网穿透呢?内网穿透是干嘛的?新手会一脸茫然,其实你可以理解是一款可以让你装X的一个服务,我们平时开发的项目运行只能在我们的局域网中......
  • docker入门加实战—从部署MySQL入门docker
    docker入门加实战—从部署MySQL入门dockerdocker部署MySQL输入如下命令:dockerrun-d\--namemysql\-p3306:3306\-eTZ=Asia/Shanghai\-eMYSQL_ROOT_PASSWORD=123\mysql部署成功截图如下:当执行命令后,Docker做的第一件事情,是去自动搜索并下载了MySQL,......
  • springboot部署jar项目
    查询进程: ps-ef|grepjava杀死项目进程: kill-9进程号部署命令liunx:自己创建日志放入nohup.out文件中nohupjava-jarvisPlat-service-2.3.0.230522_CLOUD_RELEASE.jar&  重定向日志文件到service.log文件中nohupjava-jarservice.jar>./lo......
  • centos7 本地私有化部署sealos 桌面
     sealos是什么?我想引用它官方的一句话改造下,sealos让云像个人电脑一样简单官方文档地址:https://docs.sealos.io/zh-Hans/docs/Intro 今年6月份,sealos正式发布了公有云托管版本,网上私有化教程不多,自己一点小坑现记录如下主要参考https://mp.weixin.qq.com/s/tlXQ92jM2T3......
  • 实现脚本自动部署docker
    前言:使用场景是我这边的一个单体项目需要多一个多副本的部署方式,一直输入重复命令我实在是嫌烦了,使用写了一个脚本来一键更新部署上去。jar包都是我手动上传的,没有把包传入公网库里。之所以记录就是因为遇到了几个没有遇到过的问题记录以下。 示例:#!/bin/bash......
  • docker部署netbox 中部分汉化配置
    1.复制容器中关于汉化配置的文件到本地dockercpc99ddcb:/opt/netbox/netbox/netbox/navigation/menu.py.2.修改menu.py配置,修改为汉化之后的配置文件具体内容如下参考配置为:https://songxwn.com/netbox/fromdjango.utils.translationimportgettextas_fromnetbox.re......
  • VS code+python环境部署
    安装VScode下载vscode下载链接:https://code.visualstudio.com/Download根据自己的电脑型号下载对应的版本。我下载的是windows/UserInstaller,但是使用时会提示“”。所以,推荐下载SystemInstaller版本。两者区别可以自行百度,或......
  • tomcat部署多个站点
    只要在tomcat的server.xml中增加一个service节点,新建一个webapps2文件夹,把新站点的文件放到这个文件中的ROOT目录下即可<Servicename="Catalina"><Connectorport="8088"protocol="HTTP/1.1"connectionTimeout="20000"......
  • 部署Nuget私有库3 - ProGet
    windows10、 利用ProGet搭建nuget私有库一、官方提供两种部署方式下载地址 二、exe可执行程序安装(OffineInstaller)   执行安装,等待安装完成,如下  如果选择了的是 web server,INEDOPROGETWEBSVE 服务也会running如果选择了 iis,则安装时,会自动在iis......