У меня есть приложение, управляемое VC ++, которое было создано и протестировано на VC80.CRT версии 8.0.50727.762. Я проверил, что встроенный манифест указывает на 762, а на машине сборки установлена 762 как последняя версия VC80.CRT.
Приложение теперь также запускается на компьютере с 762 и более поздней версией среды выполнения (4053).
Обе машины, кстати, являются XP Pro SP2; вторая машина (так сказать 4053) имеет .NET 3.0.
Приложение работает на компьютере 4053, и я думаю, что я понимаю, что из-за политики издателя, которая сопровождает VC80.CRT под SxS, приложение загружает для приложения 4053, а не 762.
По разным причинам, в которые я не хочу входить, я пытался заставить его использовать версию 762, но пока безуспешно.
В любом случае, после изучения литературы, мне кажется, я понимаю цепочку, которая определяет целевую версию для загрузки: конфигурация приложения -> политика издателя -> конфигурация компьютера.
Итак, я подошел к размещению файла myapp.exe.config (см. Ниже) рядом с myapp.exe; обратите внимание на настройку publisherPolicy со значением «нет», чтобы избежать второго шага создания цепочки.
Приложение по-прежнему загружает 4053, а не 762. Возможно, это из-за того, что говорит файл конфигурации машины, но я даже не могу понять, что должно означать содержимое этого файла - конечно, нет никакого ссылка на VC80.CRT или любую из библиотек msvc [x] 80.dll там.
Я ожидал, что ссылаться на более старую версию сборки было бы относительно легко, так как это ключ к преодолению «дьявольского ада» - даже если издателю сборки хочется гарантировать обратную совместимость (через политику издателя).
Кто-нибудь может пролить свет?
Спасибо
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC80.CRT" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b">
</assemblyIdentity>
<publisherPolicy apply="no" />
<bindingRedirect oldVersion="*" newVersion="8.0.50727.762"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>