现在的位置: 首页 > 综合 > 正文

VSTO简介及发展

2013年10月21日 ⁄ 综合 ⁄ 共 3360字 ⁄ 字号 评论关闭

.什么是VSTO

个人的理解,VSTOVisual Studio的一个package。做过Visual Studio 扩展的人可能知道,Visual Studio可以通过三种方式进行功能的扩展开发:Macro, Add-In, Package。而整个Visual Studio可以看作由所有具有不同功能的Package组合而成的,这些Packages就是Winform, SmartDevice, Web Development等等。而VSTO是他们之中的一员,它支持用托管代码来进行Office的扩展开发。

在过去,人们通常使用VBA来进行Office的扩展开发。VBA是一个很简单的开发环境,集成在很多Office的产品中。每个Office的产品,如WordExcelOutlook,都通过COM暴露了非常丰富的对象模型,供程序员编程。我们就是用VBA和这些OfficeCOM对象模型对Office进行扩展开发的。最常见的是增加一些自定义的按钮,还有自定义响应一些事件。但是VBA有很多不足之处。首先,它只面对VB脚本语言,并且开发环境显得简单,不够强大。最致命的是,VBA把代码分别嵌入到每个文档中去,这导致万一出现bug,或者项目需要升级时,就很难处理。需要对于每个文档进行修改,这种低效率在企业级应用中是无法容忍的。VBA的另一个问题:安全保护做得很薄弱,很多人可以利用宏制造病毒。

Microsoft想用Visual Studio .NET.NET Framework来解决这些问题,所以VSTO应运而生。官方文档上描述的是,目前发布了的VSTO有两个版本VSTO 2005VSTO 2005 SE。前者提供了6种项目模板: Word DocumentWord TemplateExcel DocumentExcel TemplateOutlook Add InInfoPath Form Template。这里所有的模板都只是针对于Office 2003而言的。除了Outlook Add In之外,所有模板用来开发文档级应用。VSTO 2005 SE(Second Edition), 提供了11种模板,全部都是Add In:包括Word, Excel, Outlook, PowerPoint, Visio20032007 Add In 10个,再加一个InfoPath 2007Add In. 所谓的Add In, 就是常说的插件,或者叫程序级应用。事实上,VSTO 2005VSTO的第二个版本,第一个版本是VSTO 2003, 集成在Visual Studio .NET之中,它是微软第一次尝试将.NET托管代码与Office对象模型整合到一块儿。它是我们现在看到的VSTO 2005的一个框架,VSTO 2005比它多了很多功能,如ActionsPane, DataCache, SmartTag等等。

 

.文档级和应用程序级项目的区别

那什么是文档级应用,什么是程序级应用,它们有什么区别呢?

文档级应用就是所写的代码,都是针对于某单个文档而言的。只有在用户打开这个文档时,自定义代码才会被装载。

而程序级应用是指,无论用户是打开哪个文档,还是新建一个空白文档,只要他打开相应的Office程序,自定义代码都会被装载。

这两种不同的行为决定了,文档级应用和程序级应用,采用了不同的实现方式。事实上,它们两个都是将代码编译到一个程序集(assembly)里面,也就是托管代码中的dll文件。不同的是,对于不同的应用,如何告诉Office到哪儿去找这个dll文件并装载它呢?Microsoft使用了一个叫manifest的东西,manifest记载了dll文件在哪儿,以及代码的入口点是什么。。。。。

Add In把manifest单独作为一个文件部署,每当用户打开Office的时候,Office会先到注册表中寻找插件信息,其中包括了manifest的存储位置。找到manifest后,再根据manifest中的信息加载dll中的代码。所有COM Add In信息存储在注册表如下的位置:(如果是给所有用户部署的Add In,也有可能在HKLM中的对应位置)

HKCU/Software/Microsoft/Office/.......

程序级应用的manifest是一个XML文件,可以用notepad打开并修改,格式如下:

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" manifestVersion="1.0">

  <assemblyIdentity name="ExcelAddIn1.dll" version="1.0.0.0" />

  <asmv2:entryPoint name="Startup" dependencyName="dependency0">

    <asmv2:clrClassInvocation class="ExcelAddIn1.ThisAddIn" />

  </asmv2:entryPoint>

  <asmv2:dependency asmv2:name="dependency0">

    <asmv2:dependentAssembly>

      <assemblyIdentity name="ExcelAddIn1" version="1.0.0.0" />

    </asmv2:dependentAssembly>

    <asmv2:installFrom codebase="ExcelAddIn1.dll" />

  </asmv2:dependency>

</assembly>

 

文档级应用,有所不同,它把manifest嵌入到了文档里面,每当这个文档被打开的时候,Office从该文档内嵌的manifest中得到dll的信息,然后装载我们的代码。因为文档级应用的manifest是内置的,所以修改起来比较麻烦。我们可以使用ServerDocument提供的几个方法来修改dll文件的位置。代码如下:

               

string solutionDocument = @"C:/Documents/ExcelApplication.xls";

string assemblyName = "ExcelApplication.dll";

string manifestPath = @"//servername/deployshare/ExcelApplication.application";

string applicationVersion = "1.0.0.1";

 

if (ServerDocument.IsCustomized(solutionDocument))

{

    ServerDocument.RemoveCustomization(solutionDocument);

}

 

ServerDocument.AddCustomization(

    solutionDocument, assemblyName, manifestPath,

    applicationVersion, false);

此外Microsoft还提供了一个免费的工具可以用来修改Office 2003文档内嵌的manifest, 叫做ApplicationManifestEditorMSDN上有一个很详细的Walkthrough来介绍ApplicationManifestEditor: http://msdn2.microsoft.com/en-us/library/aa537185(office.11).aspx

 

新版VSTO

VSTO的下一个版本是VSTO 3, 集成在Visual Studio 2008中,现在尚处于Beta 2版本,大概年底会发布。VSTO 3新添加了对很多项目的支持,所有项目模板如下图:

               

 

VSTO 3的新功能:

  1. Office 2007的文档级应用的支持,
  2. 可视化的自定义Office2007Ribbon
  3. Visual Studio 2008设计Outlook Form Region
  4. Share Point Workflows 项目等。

 

抱歉!评论已关闭.