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

然而,使用它并没有预想中的那么顺利,特别是在做过多次目录添加和删除之后,可能出现添加在列表中的目录无法在智能感知列表中显示出来的情况;甚至会出现列表当中明明没有这个目录,却也添加不进去的情况,它总是认为这个目录已经在列表中存在。为了解决这个问题,我对它的存储方式作了一些研究,并跟踪了相关的注册表和文件变化,下面是我的研究结果。
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\<Your Account Name>\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文件。
版权声明:本文由作者Tony Qu原创, 未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步