关于VS2005中的Code Snippets Manager的问题及解决

news/2024/7/5 18:49:20
Code Snippets Manager是VS2005专门用来管理代码块智能感知的工具。



然而,使用它并没有预想中的那么顺利,特别是在做过多次目录添加和删除之后,可能出现添加在列表中的目录无法在智能感知列表中显示出来的情况;甚至会出现列表当中明明没有这个目录,却也添加不进去的情况,它总是认为这个目录已经在列表中存在。为了解决这个问题,我对它的存储方式作了一些研究,并跟踪了相关的注册表和文件变化,下面是我的研究结果。

Code Snippets Manager主要在三个地方保存信息:

1. HKEY_CURRENT_USER/Software/Microsoft/VisualStudio/8.0/Open Find/Microsoft Visual Studio/Settings/Code Snippets Directory/File Name MRU/Value

这是一个REG_MULTI_SZ 类型的值,可以用来存储多个字符串,可以看作是一个字符串数组,这里用来存储路径,用回车作为分隔符,在我的机器上,它的值是这样的。

C:/Documents and Settings/tonyqus/My Documents/MSDN/Visual C# 2005 Code Snippets/filesystem
C:/Documents and Settings/tonyqus/My Documents/MSDN/Visual C# 2005 Code Snippets/datatypes
C:/Documents and Settings/tonyqus/My Documents/MSDN/Visual C# 2005 Code Snippets/database
C:/Documents and Settings/tonyqus/My Documents/code1
C:/Documents and Settings/tonyqus/My Documents/MSDN/Visual C# 2005 Code Snippets/
C:/Program Files/Microsoft Visual Studio 8/VC#/Snippets/1033/Refactoring
C:/Documents and Settings/tonyqus/My Documents/MSDN/Visual C# 2005 Code Snippets/application

2.  HKEY_CURRENT_USER/Software/Microsoft/VisualStudio/8.0/Languages/CodeExpansions/Visual C#/Path

这是一个REG_SZ 类型的值,可以用来存储字符串,这里用来存储路径,用分号分割,在我的机器上,它的值如下:

%InstallRoot%/VC#/Snippets/%LCID%/Visual C#/;%MyDocs%/Code Snippets/Visual C#/My Code Snippets/;%InstallRoot%/VC#/Snippets/%LCID%/OfficeDevelopment/;%InstallRoot%/VC#/Snippets/%LCID%/Refactoring/;C:/Documents and Settings/tonyqus/My Documents/code1/;C:/Program Files/Microsoft Visual Studio 8/VC#/Snippets/1033/Workflow/;C:/Documents and Settings/tonyqus/My Documents/MSDN/Visual C# 2005 Code Snippets/datatypes/

3.  C:/Documents and Settings/ /Local Settings/Application Data/Microsoft/VisualStudio/8.0/1033/ExpansionsXML.xml

这是一个xml文件,结构比较复杂,我们可以看到在上面的两个设置中,仅存储目录,而在这个文件中既保存目录又保存目录中的.snippet文件的完整路径,这可能是为了提供.snippet文件的import功能而特地设计的。这里就不做展开了,大家有兴趣的话,可以研究一下它的结构。

来说说可能出现的问题:
问题 1

在HKEY_CURRENT_USER/Software/Microsoft/VisualStudio/8.0/Languages/CodeExpansions/Visual C#/Path 中存储着两个完全相同的路径,如
C:/Documents and Settings/tonyqus/My Documents/MSDN/Visual C# 2005 Code Snippets/database
C:/Documents and Settings/tonyqus/My Documents/MSDN/Visual C# 2005 Code Snippets/database/
我们可以看到这两个路径唯一的差别就是一个'/',但似乎Code Snippets Manager不会对这样的情况进行处理,它会认为这是两个完全不同的路径,所以如果出现这种情况,建议删掉其中一个。

问题 2
在注册表的两个值中目录明明存在,但却无法在智能感知时列出该目录,这可能是由于 ExpansionsXML.xml没有改目录的相关信息所致,建议删除或者重命名ExpansionsXML.xml,然后重新启动VS2005,并打开Code Snippets Manager,你会发现一个Code Snippets Manager会根据注册表中的路径新建一个新的ExpansionsXML.xml文件。

问题 3
智能感知可以列出的目录,在Code Snippets Manager的列表中根本没有,但每次试图添加目录时,会报目录已存在的错误。遇到这种情况,恐怕要对这三个存储位置都要做处理,首先要确保注册表中确实把这个目录删除了,还有就是重建ExpansionXML.xml文件。



http://www.niftyadmin.cn/n/3656335.html

相关文章

控制台界面控制(九):读取键盘操作

本文为转载文档,原文链接为:http://blog.csdn.net/bnb45/article/details/8035346 读取键盘操作指的是,当我们输入什么的时候,控制台可以通过函数截获,这时候可以在里面写下要进行的操作。因为键盘的操作是连续的&…

[翻译]脚本引擎实现 - 第三部分 解析器

原文地址:http://www.flipcode.com/articles/scripting_issue03.shtml 作者:Jan Niestadt译者:Tony Qu介绍第二部分的程序运行得很好,它把程序转换为符号(token),所有的关键字、操作符、标点符号、标识符和常数都马上被…

控制台界面控制(十):读取鼠标操作

本文为转载文档,原文链接:http://blog.csdn.net/bnb45/article/details/8042819 我在看到这一章之前一直不知道控制台也能通过鼠标来操作。控制台的鼠标操作需要得到鼠标位置信息,左右键信息,单双击等等。 效果 当鼠标在控制台范围…

firefox下几个实用的免费开发插件

今天在看Ajax基础教程,看到书中推荐了几个不错的工具WebDeveloper提供了许多开发中十分有用的环境模拟工具,如禁用JavaScript,描出页面中的隐藏表单等,对于web脚本开发人员特别有用,而且它是firefox插件下载地址&#…

键盘按键数字对照表

本文为转载文档,原文地址:http://blog.csdn.net/bnb45/article/details/8035291 扫描码和虚拟码有对应的关系,但它们是不同的。键盘扫描码和具体的硬件有关,不同的厂商对同一个按键的扫描码可能不同。计算机先获得扫描码&#xff…

关于asp.net Session丢失问题的总结

更完整的关于asp.net session 丢失问题的帖子请见下文:理解Session State模式ASP.NET SESSION丢失FAQ [翻译] asp中Session的工作原理:asp的Session是具有进程依赖性的。ASP Session状态存于IIS的进程中,也就是inetinfo.exe这个程序。所以当i…

从MSN Messenger看软件行为

软件行为从一定意义上讲,就是为了保证软件的可用性和用户界面友好,这段时间在使用msn时发现了一些很有意思的小细节,拿出来和大家探讨一下。当然可能有些朋友会认为这些软件行为是应该的,其实软件行为的意义并不在于行为本身&…

C++类大小

一个空类class A{};的大小为什么是1&#xff0c;因为如果不是1&#xff0c;当定义这个类的对象数组时候A objects[5]; objects[0]和objects[1]就在同一个地址处&#xff0c;就无法区分。 单继承 #include<iostream> using namespace std; class A { public:virtual void…