We maintain our own nuget server, and I recently set up a SymbolSource server (http://www.symbolsource.org/; the website is currently not responsive. Try the google cache or archive.org version of the website instead. The library you need to set up a SymbolSource server is available by nuget.) to complement the nuget server with .pdbs & source. After following this set of installation instructions (http://www.xavierdecoster.com/setting-up-your-own-symbolsource-server-step-by-step) I was able to upload symbols for a test nuget package. I created my test package on a different machine from the one I used it on in its nuget form so that my visual studio 2013 would not be able to find the source locally. I added an entry for the SymbolSource server in Visual Studio 2013 Tools, Options, Debugging, Symbols. In Tools, Options, Debugging, General I unchecked "Enable just my code," checked "Enable source server support," and unchecked "Require source files to exactly match the original version."
My test nuget package had deliberate error (divide by zero) so I would have something interesting to look at. When I created a host application and added the test nuget package, then invoked the path to the error, the exception flared, but instead of showing source code, a dialog box popped up asking me for the location of source .cs file. Since the source code for the test nuget package was not on the machine with the project using it, I was forced to click "cancel." Visual studio broke in code outside the nuget package. That was not what I had hoped for. I had hoped that visual studio would throw open the source code from the SymbolSource server.
The .pdb was downloading correctly. If I put a breakpoint in the calling code and stepped into the calls to objects from the nuget package, I would see the correct source code for the nuget package. If I then invoked code that threw an exception in a nuget object, the debugger broke in the source for the nuget package just as I hoped it would above. Once this happens, I can close and restart the project, and breaks inside the nuget assembly still pop up the source code downloaded from the SymbolSource server.
As best I can guess, when the exception is hit in the nuget package, Visual Studio 2013 downloads (or has already downloaded) the .pdb file. It then knows what source file it needs, but on an exception it does not download the source from the SymbolSource server. It instead opens a dialog box asking for the location of the source file on the local machine. If the source code has been downloaded for another reason (e.g. I have stepped into it), then it will find previously downloaded source code.
This seems to be either a Visual Studio bug, or I have missed some setting in Visual Studio. Is there something else I need to do to get the source code to download from a SymbolSource server on an exception without having previously stepped into the code in the nuget package?