:加载宏的改进
今天,我们发表两篇客串帖子中的第二篇,来自Patrick Smith, 程
序开发小组的程序经理。
概述和背景
代码在为Office成品编写的加载宏里变得越来越流行了。Visual Studio
Tools Office (VSTO)下个版本和Office 2007大概在同一时间段上市。
VSTO的下个版本增加了对在应用级创建加载宏的支持。自从Office 2003开
始,代码的更好支持的需求就已经清楚了,但是,运行代码时会有一些挑战。在
这些挑战中有安全,恢复,管理和隔离。这些挑战中的大多数都是由于加载宏基
于mscoree.dll而导致,mscoree.dll是缺省的VS.Net加载宏模板使用的加载器。
有些工作区域是针对这些障碍的,例如创建一个单独的“shim”来代替
mscoree.dll,我们想要让Office 2007系统中的这个过程变得更好一些。我们正
是那样做的!
改进
作为一名开发者,你现在可以使用VSTO新版本提供的AddinLoader来设计你
的加载宏了。在Office里运行代码时,新的AddinLoader帮助克服那些历史挑战
。
• 安全模式——Office系统2003产品架构里的所有加载宏的安全决定都是基
于mscoree.dll,它是不可签名的。正因为该安全模式,加载宏本身不可签名,
而Office产品也不会知道,因为它只看mscoree.dll,并且,因为只看
mscoree.dll,所以当Office应用软件设置安全性为高时,没有加载宏可以运行
。现在,如果加载宏是基于AddinLoader的话,那么Office 2007系统就能够区别
.NET安全模式,为加载宏决定安全性。只有使用AddinLoader,这才是可能的。
• 恢复模式——Office 2003系统的产品会自动禁用加载失败的加载宏,因
此,就可以避免该加载宏以后的问题,然而,因为该加载宏实际上是被看作
mscoree.dll的,mscoree.dll是被禁用的加载宏,而不是实际上导致该问题的
COM加载宏。这就会防止任何基于mscoree.dll的加载宏加载,因为加载器本身被
禁用了。现在,看的是加载宏而不是加载器,具体有错误行为的加载宏被禁用,
而不是加载器被禁用。
• 管理——当查看加载宏对话框时,mscoree.dll就会被看作是加载宏名称
,而不是实际在mscoree.dll里运行的COM加载宏。一旦你在运行多个加载宏,就
很难辨别哪个是哪个了。现在,显示的是实际的加载宏的名称了。
• 运行时间隔离——mscoree.dll将所有加载宏加载到默认的AppDomain。因
此,没有内存隔离,加载宏可以相互步入,影响加载宏之间共享的对象。新的
AddinLoader将给每个加载宏使用独立的AppDomains,因此,实现了对该加载宏
的隔离。
需要什么
为了利用这些新的改进,你将需要使用VSTO新版本(这里有篇对该版本的技
术概述)来创建你的加载宏。
另外,你需要确保在加载宏加载的机器上有下述配置可用:
• Common Language Runtime 2.0或以上版本
• VSTO Runtime(来自VSTO的新版本)
• CAS政策给加载宏充分信任
所有这些前提条件都可以从你在VSTO里创建的加载宏的安装工程里配置。