Подтвердить что ты не робот

Не удается войти в исходный код платформы .NET

Я использую Visual Studio 2013 и имею проект .NET 4.5.2. Я установил свои настройки в соответствии со следующей страницей:

http://referencesource.microsoft.com/setup.html

С помощью этой установки я вижу, что все необходимые символы загружаются и загружаются, но я не могу вписать код, например:

var cookieContainer = new System.Net.CookieContainer();

Я получаю сообщение Источник не доступен.

Я могу просто вставить следующий код:

Console.WriteLine("test");

У вас есть идея, почему я могу входить в код из mscorlib.dll, но не могу входить в код из System.dll?

4b9b3361

Ответ 1

и иметь проект .NET 4.5.2

Номер версии - это ваша проблема. Это общая проблема с исходным источником, Microsoft не поддерживает ее достаточно хорошо, чтобы предоставить источник для новых версий фреймворка. И более тревожные, для безопасности и стабильности обновлений. Ребята, которые работали над этим, хорошо знают об этой проблеме, они отметили это как проблему в своей презентации, но в настоящее время она всегда и всегда имела статус объекта //todo.

Это то, что вы можете визуализировать, сначала удалите System.pdb из кеша символа (тот, который находится в MicrosoftPublicSymbols). Затем начните отладку тестовой программы, отладчик будет извлекать новый PDB с сервера. Используйте Debug > Windows > Modules, щелкните правой кнопкой мыши System.dll и выберите "Информация о загрузке символов". На моей машине выглядит:

C:\projects2\ConsoleApplication407\bin\Debug\System.pdb: Cannot find or open the PDB file.
C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.pdb: Cannot find or open the PDB file.
C:\Windows\System.pdb: Cannot find or open the PDB file.
C:\Windows\symbols\dll\System.pdb: Cannot find or open the PDB file.
C:\Windows\dll\System.pdb: Cannot find or open the PDB file.
C:\temp\symbols\System.pdb\c464b02c2bf04080adcad166dc729c151\System.pdb: Cannot find or open the PDB file.
C:\temp\symbols\MicrosoftPublicSymbols\System.pdb\c464b02c2bf04080adcad166dc729c151\System.pdb: Cannot find or open the PDB file.
SYMSRV:  C:\temp\symbols\System.pdb\C464B02C2BF04080ADCAD166DC729C151\System.pdb not found
SYMSRV:  http://referencesource.microsoft.com/symbols/System.pdb/C464B02C2BF04080ADCAD166DC729C151/System.pdb not found
http://referencesource.microsoft.com/symbols: Symbols not found on symbol server.
SYMSRV:  System.pdb from http://msdl.microsoft.com/download/symbols: 96985 bytes 
http://msdl.microsoft.com/download/symbols: Symbols downloaded from symbol server.
C:\temp\symbols\System.pdb\C464B02C2BF04080ADCAD166DC729C151\System.pdb: Symbols loaded.

Вы можете видеть, что он ищет PDB в обычных местах и ​​не находит его. Затем свяжитесь с SYMSRV. Сначала он переходит в http://referencesource.microsoft.com, как и следовало ожидать, но этот сервер говорит "не найден". И вы получите копию с обычного сервера msdl, разделенного, у которого нет необходимой информации об отладке номера файла + строки.

Для этого нет чистого исправления, вам придется снова перейти к исходной версии. Что-то я не могу сделать, используя Windows 8.1. И не следует делать, я использую VS2013. Redgate Reflector - альтернатива.

Я создал элемент UserVoice для этого, ему нужно гораздо больше голосов.


Обновление: теперь исходный источник обновлен до 4.5.2 (март 2015 г.)

Ответ 2

JetBrains DotPeek (в настоящее время версия 1.2) имеет очень приятную функцию, которая позволяет вам не только генерировать pdbs, но и обслуживать эти pdbs локально через встроенный сервер Symbol для предоставления символов Visual Studio при отладке. Очевидно, что исходный код - это декомпилированный код, а не фактический источник, но он может быть очень полезен, тем не менее, для тех случаев, когда обычные серверы символов MS не дают вам нужные вам pdbs.

Информацию о функции сервера символов можно найти на их веб-сайте.