基于Artifactory 4搭建内部.NET符号服务器的技术咨询
嘿,我之前刚好在Artifactory 4上搭建过内部的.NET符号服务器,而且也是没用到IIS,给你分享下实际操作的思路和解决办法:
核心思路:用Artifactory自带服务替代IIS
Artifactory本身的Jetty服务器完全能处理符号请求,不用额外依赖IIS,核心是做好符号存储库配置和URL路由映射,符合微软符号服务器的请求规范就行。
1. 先创建符号专用的存储库
- 登录Artifactory后台,新建一个本地存储库,类型选
Generic(符号文件不需要NuGet的特殊处理,通用库足够) - 给存储库起个直观的名字,比如
dotnet-internal-symbols,根据内部权限需求,要么开启“允许匿名访问”,要么配置权限组让调试团队能访问这个库
2. 配置URL路由规则(适配微软符号请求格式)
微软符号服务器的请求格式是/symbols/{文件名}/{文件哈希}/{文件名},我们需要让Artifactory把这类请求转发到刚才的符号存储库:
- 找到Artifactory安装目录下的
etc/jetty.xml,编辑添加重写规则:<New id="RewriteHandler" class="org.eclipse.jetty.rewrite.handler.RewriteHandler"> <Set name="rules"> <Array type="org.eclipse.jetty.rewrite.handler.Rule"> <Item> <New class="org.eclipse.jetty.rewrite.handler.RegexRule"> <Set name="regex">/symbols/(.*)/(.*)/(.*)</Set> <Set name="replacement">/artifactory/dotnet-internal-symbols/$1/$2/$3</Set> </New> </Item> </Array> </Set> </New> - 保存后重启Artifactory服务,这样类似
http://你的Artifactory地址/symbols/MyLib.pdb/xxxxxxxxx/MyLib.pdb的请求,就会自动映射到符号存储库的对应路径
3. 上传符号文件到存储库
- 对于已有的NuGet包:可以用
sn.exe -Tp 你的库.pdb获取pdb文件的SHA1哈希,然后按照{文件名}/{哈希}/{文件名}的路径结构,把pdb文件或者.symbols.nupkg上传到符号存储库 - 打包时自动化:在
dotnet pack命令里加上--include-symbols生成符号包,然后写个脚本,把符号包推到符号存储库,同时把主NuGet包推到你的现有NuGet仓库,实现同步上传
4. 在Visual Studio里配置使用这个符号服务器
- 打开VS的「工具」->「选项」->「调试」->「符号」
- 添加符号服务器地址:
http://你的Artifactory地址/symbols - 勾选「将符号缓存到以下目录」,选一个本地路径,避免每次调试重复下载符号
几个你可能关心的问题
- 不用IIS会不会有性能问题?:内部环境的符号请求量一般不大,Artifactory自带的Jetty完全够用,只要服务器基础配置达标,不用额外折腾IIS
- 符号和NuGet包怎么关联?:可以在NuGet包的
.nuspec里添加<symbolPackageUrl>节点,指向你的符号存储库对应路径;或者只要上传时路径和哈希匹配,VS调试时会自动找到对应符号 - 权限怎么管控?:在Artifactory的权限管理里,给符号存储库创建专门的权限组,只开放给需要调试的团队成员,避免符号文件泄露
内容的提问来源于stack exchange,提问作者ssloan
相关产品推荐
相关产品推荐

