Я написал приложение .NET 4.5 на машине с Windows 7 с Visual Studio 2012, и оно отлично устанавливается и работает на Windows 7.
Когда я пытаюсь развернуть его на машине с Windows 8, он дает довольно катастрофический сбой с не очень полезным выводом в средстве просмотра событий.
Трассировка с помощью Dependency walker предполагает, что метод не может быть найден в одной / некоторых из основных dll Windows. Например:
LoadLibraryExW("C:\Windows\Microsoft.NET\Framework64\v4.0.30319\mscoreei.dll", 0x0000000000000000, LOAD_WITH_ALTERED_SEARCH_PATH) returned 0x00007FFDEA780000.
GetProcAddress(0x00007FFDEA780000 [MSCOREEI.DLL], "RegisterShimImplCallback") called from "MSCOREE.DLL" at address 0x00007FFDEA82F3A9 and returned 0x00007FFDEA783444.
GetProcAddress(0x00007FFDEA780000 [MSCOREEI.DLL], "RegisterShimImplCleanupCallback") called from "MSCOREE.DLL" at address 0x00007FFDEA82F3BC and returned NULL. Error: The specified procedure could not be found (127).
Изучая mscoreei.dll, я замечаю:
Компьютер с Windows 7
v4.0.30319.18408
613 456 байт
Компьютер с Windows 8
v4.0.30319.33440
633 424 байта
Обе машины (согласно детектору версии ASoft .NET) имеют .NET 4.5 Full.
Почему на моих машинах разные сборки .NET, и как я могу убедиться, что компилятор на моем компьютере с Windows 7 нацелен на правильную версию, которая есть на машинах с Windows 8?