如何发布Visual Studio Addins?
前些天帮助一个项目做了针对VS Addins安装问题的研究,简单总结一下。问题背景:使用VS2005 Addin模板生成MyAddin1工程, 完成了Addin的编译,生成MyAddin1.dll和MyAddin1.AddIn两个文件备用,通常我们在Debug的时候都是把MyAddin1.AddIn里的路径改为却对路径,然后把它拷贝到%Documents%\Visual Studio 2005\Addins下面,这个看起来很简单,但是在客户机器上,我们该怎么做呢?
如果我们坦然告诉客户说你这样安装——先把assembly拷到某某地方,在把addin文件拷到某某地方,客户肯定会说我不会,然后你的跑去折腾,然后不久客户又说有问题,你得继续过去折腾;如此下去,貌似问题解决,但是突然有一天,客户安装了一个addin,很不凑巧,这个addin的安装方式也是拷到%Documents%\Visual Studio 2005\Addins,并且addin文件和你的同名(或者其他的文件和你的同名),于是,电话又来了……
显然这个太累了,有没有好的方案呢?
肯定是有的,在道出解决方案之前,我们要先看看我们的Addin的目标——IDE(这里就是VS2005啦),打开【工具】(Tools)菜单,这里可以打开【选项页】(Option),在【环境】(Enviroment)节点下有个【插件/宏安全】,然后就可以看到里面列出了很多的目录,
查了下文档,MS说IDE会按照这里的目录搜索插件和宏;哈哈,这就好办了,如果我们把发布的所有文件放到某个目录,然后把这个目录注册到IDE的搜索目录下去。
那么,要怎么注册呢?MS把这些目录保存在注册表里.
这里列出了一些常用版本对应的注册表目录:
VS2005,x86:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\AutomationOptions\LookInFolders
VS2005,x64:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\8.0\AutomationOptions\LookInFolders
VS2008,x86: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\AutomationOptions\LookInFolders
VS2008,x64: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\9.0\AutomationOptions\LookInFolders
PS:如可使Addin支持多个Host(同时支持VS2005和VS2008)?
我们只需要增加HostApplication节点就可以支持对应的IDE了,如下addin支持了VS2005和VS2008:
如果我们坦然告诉客户说你这样安装——先把assembly拷到某某地方,在把addin文件拷到某某地方,客户肯定会说我不会,然后你的跑去折腾,然后不久客户又说有问题,你得继续过去折腾;如此下去,貌似问题解决,但是突然有一天,客户安装了一个addin,很不凑巧,这个addin的安装方式也是拷到%Documents%\Visual Studio 2005\Addins,并且addin文件和你的同名(或者其他的文件和你的同名),于是,电话又来了……
显然这个太累了,有没有好的方案呢?
肯定是有的,在道出解决方案之前,我们要先看看我们的Addin的目标——IDE(这里就是VS2005啦),打开【工具】(Tools)菜单,这里可以打开【选项页】(Option),在【环境】(Enviroment)节点下有个【插件/宏安全】,然后就可以看到里面列出了很多的目录,
查了下文档,MS说IDE会按照这里的目录搜索插件和宏;哈哈,这就好办了,如果我们把发布的所有文件放到某个目录,然后把这个目录注册到IDE的搜索目录下去。
那么,要怎么注册呢?MS把这些目录保存在注册表里.
这里列出了一些常用版本对应的注册表目录:
VS2005,x86:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\AutomationOptions\LookInFolders
VS2005,x64:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\8.0\AutomationOptions\LookInFolders
VS2008,x86: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\AutomationOptions\LookInFolders
VS2008,x64: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\9.0\AutomationOptions\LookInFolders
PS:如可使Addin支持多个Host(同时支持VS2005和VS2008)?
我们只需要增加HostApplication节点就可以支持对应的IDE了,如下addin支持了VS2005和VS2008:
1<?xml version="1.0" encoding="utf-8" standalone="no"?>
2<Extensibility xmlns="http://schemas.microsoft.com/AutomationExtensibility">
3 <HostApplication>
4 <Name>Microsoft Visual Studio Macros</Name>
5 <Version>9.0</Version>
6 </HostApplication>
7 <HostApplication>
8 <Name>Microsoft Visual Studio</Name>
9 <Version>9.0</Version>
10 </HostApplication>
11 <HostApplication>
12 <Name>Microsoft Visual Studio Macros</Name>
13 <Version>8.0</Version>
14 </HostApplication>
15 <HostApplication>
16 <Name>Microsoft Visual Studio</Name>
17 <Version>8.0</Version>
18 </HostApplication>
19 <Addin>
20 <FriendlyName>MyAddIn1</FriendlyName>
21 <Description>Description>
22 <AboutBoxDetails></AboutBoxDetails>
23 <AboutIconData></AboutIconData>
24 <Assembly>MyAddIn1.dll</Assembly>
25 <FullClassName>MyAddin1.Connect</FullClassName>
26 <LoadBehavior>1</LoadBehavior>
27 <CommandPreload>1</CommandPreload>
28 <CommandLineSafe>0</CommandLineSafe>
29 </Addin>
30</Extensibility>
2<Extensibility xmlns="http://schemas.microsoft.com/AutomationExtensibility">
3 <HostApplication>
4 <Name>Microsoft Visual Studio Macros</Name>
5 <Version>9.0</Version>
6 </HostApplication>
7 <HostApplication>
8 <Name>Microsoft Visual Studio</Name>
9 <Version>9.0</Version>
10 </HostApplication>
11 <HostApplication>
12 <Name>Microsoft Visual Studio Macros</Name>
13 <Version>8.0</Version>
14 </HostApplication>
15 <HostApplication>
16 <Name>Microsoft Visual Studio</Name>
17 <Version>8.0</Version>
18 </HostApplication>
19 <Addin>
20 <FriendlyName>MyAddIn1</FriendlyName>
21 <Description>Description>
22 <AboutBoxDetails></AboutBoxDetails>
23 <AboutIconData></AboutIconData>
24 <Assembly>MyAddIn1.dll</Assembly>
25 <FullClassName>MyAddin1.Connect</FullClassName>
26 <LoadBehavior>1</LoadBehavior>
27 <CommandPreload>1</CommandPreload>
28 <CommandLineSafe>0</CommandLineSafe>
29 </Addin>
30</Extensibility>
To be the apostrophe which changed “Impossible” into “I’m possible”
----------------------------------------------------
WinkingZhang's Blog (http://winkingzhang.cnblogs.com)
GCDN(http://gcdn.grapecity.com/cs)