Why can't Visual Studio locate the PDB files for referenced assemblies?

Does anyone know how VS finds symbol files for referenced assemblies?

I have a solution with a number of projects, including a Silverlight application and host website.

I have an EXT folder in the structure, from which I reference some assemblies given to me from another team in the company. In that same folder are the corresponding PDBs.

The app works fine, but the symbol files for the referenced assemblies are not loaded. Says it can't find them in the modules list. Now this was ABSOLUTELY working on Friday, so I have no idea why it's not today.

First and foremost in my mind is why VS doesn't look in the same folder that the referenced assembly is located. It's right there! Also, the PDB files are in the output folder of the SL project that references them.

If I run DUMPBIN on the assembly, it lists a directory that I don't have. It's obviously a build directory from the other team. I see that directory being searched in the "Symbol load information", along with the usual windows directories, but not the directory where the referenced DLL came from.
LVL 16
Who is Participating?
p_davisConnect With a Mentor Commented:
you have to load symbol paths in visual studio and point to where the pdb files exist. what version of VS do you have? It should be under debug->settings and options->debugging->symbols
ToddBeaulieuAuthor Commented:

That seems so "general". If I have 20 solutions I'd have to add the ext folder into this symbol location list for each solution, right? And what about when I have different versions of common libraries in use from different solutions?

My instinct is that I want a project or solution-level hook for this.
you don't have to load it for each solution.

with different versions of common libraries for different solutions...I would say simplify if you can. That sounds like a hard scenario to maintain. Just an opinion.

either way... this is the only solution I know of for symbols. Maybe someone else will have another suggestion. I would be interested to hear it.
ToddBeaulieuAuthor Commented:
Well, I don't go out of my way to maintain different versions of common assemblies, but I do maintain the "current" binaries of shared resources in TFS and branch those into the EXT folder of solutions referencing them. This allows me to push updates only when I'm ready to, instead of immediately forcing them onto unsuspecting applications. This works great.

With the above system, I'd need to add each branch target to the list if I wanted to debug into the shared library. It's either that or maintain "master PDB locations" for each pushed version, which would be awful, as well.

Frankly, I've thought much about symbols, surely because I've never had to.

I just discovered some details about having a local DEVPATH folder for PDBs, as well as a symbol server. Both seem to suffer from the same problem - at least, I think they do. I assume they'd entail having the latest PDB file.

Actually, I guess if I'm debugging an application it most likely means I'm going to release a new version, in which case I could and should be upgrading to the latest referenced assembly anyway. I could use the DEVPATH approach in that case, pointing it to the BIN folder of that shared project.
ToddBeaulieuAuthor Commented:
I don't know if it's the best approach, but I created a symbols folder higher up in my development folder structure and added that location into VS, as you suggested.

I copied the PDBs into that folder and I'm good to go now. This introduces another concept to maintain in my TFS structure and development environment for each developer. Not sure how this will play out long-term.

Thanks for the help. Appreciated.
All Courses

From novice to tech pro — start learning today.