我已经为我当前的一个项目设置了一个符号服务器。在夜间构建期间,我:
- 构建我的源
- 将标签应用于构建中已使用的源文件
- 用必要的信息索引 pdb 文件
- 将 pdb 文件存储在 MS 符号服务器中
(其实我一直在关注这篇文章:Source Server help you kill bugs。
现在,我已经引用了在另一个项目中发布其符号的 DLL。我调试该项目,并且我想进入已发布调试符号的项目的代码。
我已经设置了 VS.NET,以便启用源服务器支持。当我调试我的项目时,我可以看到(在“模块”窗口中)我引用的项目的符号确实已加载。当我想进入源自引用的 DLL 的方法时,VS.NET 会弹出一个警告,我必须确认 VS.NET 确实可以执行命令以从源服务器获取源代码。
该命令如下所示:
ss.exe get -GL"c:\Users\... -GF -I-Y -W "$/MyProject/Source/..." -VL"specificversion"
(为简洁起见,我省略了完整路径)。
当我运行命令时,我收到错误“没有可用的源代码”。
当我在命令行上执行该命令时,出现错误:
无效的 DOS 路径
当目标路径不存在时,VSS 似乎会返回此错误。实际上,我的磁盘上不存在应该放置检索到的源文件的本地路径。VSS 应该创建它。
如何确保 VS.NET 发出命令,以便在从源服务器检索源代码时创建目标路径?
编辑:
我已经设法在我的追求中走得更远。在我的源服务器机器上,我编辑了该vss.pm
文件,并更改了VSS_EXTRACT_CMD
写入 PDB 文件中写入的“流”中存在的变量中的命令。我已将(Perl?)代码更改为:
push(@stream, "VSS_EXTRACT_CMD=if not exist %vsstrgdir% mkdir %vsstrgdir% | ss.exe get ".
"-GL\"%vsstrgdir%\" -GF- -I-Y ".
"-W \"\$/%var3%\" -VL\"%var4%\"");
所以,事实上我已经添加了'if not exists ... mkdir ...' 部分,并且我用竖线(|)分隔了这两个命令。
在 VS.NET 中,我已指定由 VS.NET 发出的 SourceServer 命令也应写入输出窗口。因此,当我复制在输出窗口中找到的命令并在命令提示符下执行该命令时,将创建目录并检索文件。\o/
不幸的是,当 VS.NET 执行此操作时,没有检索到文件,也没有创建目录......关于问题可能是什么的任何想法?
编辑: 我已经在 Windows XP 机器上进行了测试,并且它可以工作。我在办公室使用 Windows Vista,而在 Vista 上,它不起作用。似乎不允许 VS.NET 创建目标目录?