|
原帖由 flying_micky 于 2009-12-16 20:29 发表
OFFICE以后的版本是不是就用VSTO了?
最近 开始学VB2005 .NETFRAMEWORK2.0下的编程。。。
恐怕过些年国内的企业OFFICE也要更新换代了吧??
现在开始学.NET或许还不算晚。。。
看看下文:
一.什么是VSTO?
个人的理解,VSTO是Visual 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的产品,如Word,Excel,Outlook,都通过COM暴露了非常丰富的对象模型,供程序员编程。我们就是用VBA和这些Office的COM对象模型对Office进行扩展开发的。最常见的是增加一些自定义的按钮,还有自定义响应一些事件。但是VBA有很多不足之处。首先,它只面对VB脚本语言,并且开发环境显得简单,不够强大。最致命的是,VBA把代码分别嵌入到每个文档中去,这导致万一出现bug,或者项目需要升级时,就很难处理。需要对于每个文档进行修改,这种低效率在企业级应用中是无法容忍的。VBA的另一个问题:安全保护做得很薄弱,很多人可以利用宏制造病毒。
Microsoft想用Visual Studio .NET和.NET Framework来解决这些问题,所以VSTO应运而生。官方文档上描述的是,目前发布了的VSTO有两个版本VSTO 2005和VSTO 2005 SE。前者提供了6种项目模板: Word Document,Word Template,Excel Document,Excel Template,Outlook Add In,InfoPath Form Template。这里所有的模板都只是针对于Office 2003而言的。除了Outlook Add In之外,所有模板用来开发文档级应用。VSTO 2005 SE(Second Edition), 提供了11种模板,全部都是Add In:包括Word, Excel, Outlook, PowerPoint, Visio的2003和2007 Add In 10个,再加一个InfoPath 2007的Add In. 所谓的Add In, 就是常说的插件,或者叫程序级应用。事实上,VSTO 2005是VSTO的第二个版本,第一个版本是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, 叫做ApplicationManifestEditor。MSDN上有一个很详细的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的新功能:
- 对Office 2007的文档级应用的支持,
- 可视化的自定义Office2007的Ribbon,
- 在Visual Studio 2008设计Outlook Form Region,
Share Point Workflows 项目等。
|
|