原文作者:Anthony Crider
Visual Studio 2008使开发者能在只有安装了Office2007而不是Office2003的环境下创建Office 2003的Add-in 工程。只要你不关闭然后重新打开工程,一切都能正常工作。如果你关闭了工程并试图重新打开它,你将被要求更新项目版本。现在,咋一看,这个像是很无理。另外,Visual Studio 的 版本转换将让你以为你需要升级正在打开的工程因为这个工程是针对Visual Studio的更高版本的。比较令人迷惑。版本转换实际上显示的是为所有类型工程的转换的固定内容,例如一个VS2005的老板本的C++控制台程序的工程。令人欣喜的是有一个办法能让你继续操作Office 2003的工程。在这个blog中, 我将示范如何解决这个问题的方法,然后简单的对解决方案的升级背后的原理和它的一些特别的地方进行评注。
言归正状
我们说你要在Visual Studio 2008中使用Office 2003的解决方案。很好!我们说你装了Office 2007。你可以开始用新建工程对话框创建一个新的Office 2003 add-in,下图中,一个Excel 2003 Add-in 被创建了。
当Visual Studio 完成了创建工程,你将看到下面的东西:
注意到在这个例子中,有一些警告标示出了缺少注册的Office Excel 2003 的 PIA。为了运行和调试工程,我需要把他们安装到我的系统中(Office 2003也可以),但是如果是另外的情况,工程将被成功创建而且你能编译并发布工程。
问题:
但是现在,如果关闭然后重新打开工程,你将看到如下的Visual Studio 版本转换。有点奇怪,你可以运行并且调试工程(如果PIA安装并注册过)但是现在你被要求升级版本?这到底怎么回事?
答案是当Visual studio 打开一个工程, 它询问工程的工程系统当前打开工程的状态是什么样的。如果工程系统认为工程因为某些原因需要升级,工程系统会告诉Visual studio需要升级。在这种情况下,因为工程是指向不同于已安装的Office的版本,Office工具工程系统已经决定该工程需要升级。重指向Office 的版本可能是你想要的, 但是这个例子没有。
解决方案
那么怎样停止这种行为?看起来很简单。在Visual Studio的选项对话框(工具|选项)中,有一个类别扩展叫做Office Tools。在它下面的一个项目是工程升级。在选中”工程升级”后,你将遇到“工程迁移策略”选项对话框。在最后一个选项中是“总是升级到安装上的Office版本”。这就有一个问题。因为 它当前是选中的(在下面的例子中),Office工具工程系统将总是向Visual Studio 发出如果Office 2007(或者其他版本的Office)已经 安装了,那么Office 2003 add-in需要升级的信号。
掩饰了的问题:
在先前的讨论中,我们只讲了当你用Visual Studion2008创建一个新的Office 2003的add-in时将会发生什么。那么如果是用Visual Studio 2005 和Office 开发工具的特殊版本创建的add-in,情况又是怎样的?在这个例子中,如果你打开一个工程,它必须被升级到Visual Studio 2008。同时,如果”总是升级到已安装的Office版本”被选中,Office版本的指向也将被改变。如果这不是你想要的行为 ,确保选项没被选中而且允许完成升级。工程将被提升到Visual Studio 2008,但是Office的版本将仍然指向Office2003。
一些注释
在版本 转换正在轮询工程系统 决定是否需要升级的时候,我们不能给你提供一个对话框。不然,我们将简单的产生一个是/否/退出的对话框然后允许你选择制定Office版本的合适行为。当我能给你一个很长的技术解释说明为什么我们不能在那个时候弹出一个对话框,我会说我们的团队花了很长时间反复推敲这个问题试图找出一个比较好的方案。简单的回答就是这会要求非常显著的架构改变,这种改变是很危险的。毕竟,Visual Studio 是一个庞大的应用程序,我们努力试图降低风险和保持高的质量。我们仍然关注着这个问题并且下一个版本的Visual Studio可能会有架构上的改变。