Короче, сделайте следующее:
- Получить версию CLR из дампа
- Найдите и загрузите соответствующий патч Microsoft
- Извлеките sos.dll и mscordacwks.dll из патча
- Используйте его
Ниже приведен пример:
1. После загрузки аварийного дампа я получаю нужную мне версию:
>lm vm clr
дает мне
File version: 4.0.30319.18051
2. Я гуглюдля обновления MS, которое содержит эту версию:
sos.dll 4.0.30319.18051
В этом случае Google дает страницу MS KB с загрузкойссылка на сайт.Я обычно скачиваю x64 версию, потому что она содержит как x86, так и x64 dll, поэтому у меня Windows8-RT-KB2833958-x64.msu сейчас.
Примечание: иногдаполучить нужный патч сложно, но не в этом примере.
3. Использование Файловый менеджер FAR Я извлекаю кабинетный архив из этого MSU:
Windows8-RT-KB2833958-x64.cab
Примечание: Иногда внутри несколько шкафов, поэтому вам необходимо проверить, какой из них содержит sos.dll.
Примечание: Иногда исправления распространяются как .EXE, поэтому сначала необходимо извлечь файлы MSU или MSP (я делаю это с FAR), а затем извлечь из них шкафы.
4. Иногда файлы из CAB могут быть извлечены с помощью FAR, но иногда они имеют очень разную структуру, и я использую Expand.exe из WinAIK .WinAIK ISO 1.7 Гб, но вам нужна только небольшая часть.Я использую следующий BAT-файл
mkdir Extracted
..\winaik_amd64\servicing\Expand.exe "%1" -F:sos.dll "Extracted"
..\winaik_amd64\servicing\Expand.exe "%1" -F:mscordacwks.dll "Extracted"
Эта команда извлекает все версии указанных библиотек, каждая из которых находится в своем собственном каталоге.Иногда есть 2 версии mscordacwks.dll и sos.dll.Я считаю, что это из-за персонала GRD / LDR (QFE).В нашем примере это 4.0.30319. 18051 и 4.0.30319. 19079 .Проверьте свойства файла с помощью проводника Windows.
5. Переименуйте файлы соответствующим образом: mscordacwks.dll должно быть названо mscordacwks_% arch% _% arch%_% version% .dll и расположен рядом с sos.dll
Так что mscordacwks.dll (4.0.30319.18051) переходит к mscordacwks_AMD64_AMD64_4.0.30319.18051.dll
(переименование версии x86 в mscordacwks_ x86_x86 _4.0.30319.18051.dll )
sos.dllможет остаться без изменений, но я переименую его в sos.4.0.30319.18051.dll
Сделайте то же самое для версии 4.0.30319.19079 (для возможных будущих нужд)
6. Скопируйте эти файлы в папку 'C: \ SOS \', которая содержит множество sos.4.xxxdll и mscordacwks_AMD64_AMD64_4.xxxdll
7. Используйте его с
.load C:\SOS\sos.4.0.30319.18051.dll
Примечание: Иногда для .Net 4.5 вам необходимо добавить дополнительные «0» к версии mscordacwks mscordacwks_AMD64_AMD64_4.6.1055. 00 .dll вместо mscordacwks_AMD64_AMD64_4.6.1055. 0 .dll.Я не копал глубже, потому что мог бы справиться с этим в течение короткого периода времени.
Кстати, WinDbg скажет, если mscordacwks не может быть найден, и укажет версию (которая будет иметь двойной '0' в конце).