Upgrading VS 2005 Packages to VS 2008: A Basic Guide
原文出处:http://blogs.msdn.com/jameslau/archive/2008/01/21/upgrading-vs-2005-packages-to-vs-2008-a-practical-guide.aspx
今天,我在社区里了解到一些开发人员在升级VS 2005 Package到VS 2008时遇到了问题,于是跟了一下这些问题并记录在此。
注意:本博客讨论的内容仅仅是从基础Package工程升级,如果你使用了类似于ProjectAggregator2之类,你还需要做一些额外工作,具体你可以参考Quan的博客,哪里对这些问题做了详细描述。
这里会以过程向导的模式,一步一步为给你展示从VS 2005 Package升级到VS 2008过程中所涉及的点。
如果你喜欢摘要列表式而不是一步一步的介绍,这里也列出了它们:
- 为工程文件升级编译目标(build targets)
- 移除TargetRegistryRoot节点
- 添加Shell 9.0的引用
- 更新工程调试属性
版本兼容注解
有时候,有人提问说是否VS 2008 SDK支持开发VS2005 Package,我的回答是或许大概可以。理论上,应该没有问题,可以支持,但是我建议不要那样做。原因是我们没有对VS 2008开发VS 2005 Package做充分的测试,所以最好还是使用VS 2005 SDK开发VS 2005扩展,而使用VS 2008 SDK开发VS 2008扩展。这样最干净、简洁。
升级到VS 2008的步骤
步骤 1. 首先你要做的事情是备份你的VS 2005 Package工程。这里出于演示,我创建了一个名叫VSPackage1的默认VS Package工程,并创建一个备份。
步骤 2. 然后,使用VS 2008 (你需要安装VS 2008和VS 2008 SDK)打开上面的package工程,VS迁移向导会提示你升级。
单击下一步,并决定是否备份,推荐做备份。然后继续单击下一步,结束。向导成功或者失败取决于你的机器上同时安装有VS 2005 SDK(译注:原文是:Depending on whether you have VS 2005 SDK installed on that machine, the conversion may or may not fail. If the conversion, you will see an error message like the following),转换失败,你会看到如下错误信息:
无论上面结果如何,你任然要做下面步骤。
步骤 3. 如果Package工程已经加载,那么先卸载工程,右键单击并选择“编辑VSPackage1.csproj”,注掉下面这样几行更新其中的编译目标:
紧跟其后添加如下内容:
步骤 4. 注掉如下行更新目标注册表根(target registry root):
之后我们会自动选择正确的目标注册表跟
步骤 5. 添加对Shell 9.0的引用,首先注掉如下行:
添加如下片段:
<Reference Include="Microsoft.VisualStudio.Shell.Interop.9.0" />
这一步是必须的,因为之后VS 2008 SDK会在编译并创建.pkgdef注册文件时坚持依赖关系,而依赖恰好表现在是否添加了引用。 这里.pkgdef文件是使用VS 2008编译时自动生成的 ,它包含package的注册信息。事实上,我们已经更新了regpkg.exe使得它支持输出.pkgdef文件。这里我们只要包含这些引用就可以了,不必在意.pkgdef文件是什么,包含什么,关于它们可以在其他帖子里讨论。如果你不加这些引用,那么你会在编译时看到下面的错误.
之后,当你重新加载工程,VS迁移向导会再次出现,这次,转换一定成功。
步骤 6. 更新工程的调试属性。你可以通过在工程上右键单击,选择弹出菜单里的【属性】就可以看到。
单击调试选项卡,选中从外部程序启动,并用VS 2008代替VS 2005作为启动的外部程序,然后再命令行参数里添加"/RANU"参数
恭喜你!到这里你可以直接按F5启动VS 2008运行你的package了!
常见问题:为什么在HKEY_LOCAL_MACHINE里没有9.0Exp hive了呢?
在VS 2008 SDK里,我们允许一般用户(normal users)开发package,这意味着你不必要使用管理员去开发和测试package,也意味着在Vista下不用提升管理员权限就去运行VS了。
我们通过绕过所有的对HKEY_LOCAL_MACHINE下的VS registry hive键值读写,对应的采用了对HKEY_CURRENT_USER下的VS registry hive键值读写,所以使用VS 2008 SDK,不会在HKEY_LOCAL_MACHINE建立实验环境,而是在每个用户自己的注册表里创建实验环境。
有两点忠告:
1. 如果你为独立模式的VS Shell开发,那么你应该使用管理员运行VS,因为现在的独立模式的VS Shell开发包有一些bug会导致异常行为。
2. 由于实验环境仅为当前用户创建,所以如果你手工为当前用户创建实验环境(Exp hive)而本机其他用户没有登录,那么当她们登录时是没有实验根的。你可以通过运行开始>所有程序>Microsoft Visual Studio 2008 SDK> Tools里的"Reset the Microsoft Visual Studio 2008 Experimental hive" 来解决问题。
就这些了,希望这篇文章会帮助你升级到VS 2008!