У меня есть проект, который содержит модули Dll до сборки, построенный некоторое время в прошлом, используя Visual Studio 9.Howto: Несколько версий msvcrt9 как частные сборки SxS?
Исполняемый файл проекта строится сейчас, используя SP1 для Visual Studio 9.
Когда мы развертываем EXE, мы не хотим требовать административного доступа, поэтому C-Runtime была включена в корень приложения. Dlls: MSVCRT90.DLL и их манифест: Microsoft.VC90.CRT.manifest
Теперь EXE и последние версии манифеста времени исполнения находятся в согласии - манифест приложения запрашивает 9.0.30729.1 из файла msvcrt.dll, и crt-манифест содержит записи, подтверждающие, что msvcrt90.dll имеет версию 9.0.30729.1
Теперь проблема. Третья библиотека DLL, используемая нашим приложением, была связана с исходной версией msvcrt90.dll версии 9.0.21022.8 и имеет внутренний манифест этого эффекта.
На наших компьютерах разработки, где установлены обе версии VS9 CRuntime, приложение работает. На «свежих» ПК, где мы устанавливаем приложение в первый раз - DLL не загружается.
Теперь у меня есть некоторые читы, которые я могу сделать - нужно вернуть приложение в 9.0.2 - получить 9.0.2 DLL с исходного исходного носителя. Это нежелательно, поскольку 9.0.3 является предпочтительным. Или я очень стараюсь получить перестройку сторонней библиотеки.
Кроме того, я уверен, что на наших компьютерах разработки, когда сторонняя библиотека запрашивает старую dll, она перенаправляется на новую dll - они совместимы с двоичными файлами.
Заявительные манифестации и ассамблеи призваны спасти всех нас от этого вида мусора. Должно быть возможно отредактировать файлы манифеста сборки, чтобы загрузить как exe, так и dll.
Это очень близко к тому, что ив пытался. Где и как я могу разместить этот XML? Мое приложение имеет встроенный. Манифестный файл, в документации говорится, что bindingRedirections следует поместить в файл app.exe.config. Я создал файл конфигурации, поместил его в папку приложения и не вижу никакой разницы. im не уверен, что он даже используется. Возможно, мне нужно обеспечить, чтобы assemblyIdentity полностью соответствовал моим приложениям manifestItentiy. –
Он должен быть внутри манифеста, вы можете добавить свое собственное объявление в манифест, сгенерированный VS, у меня нет VS здесь, поэтому я не могу дать вам точный метод, но он где-то под настройками проекта \ manfirst tool –
Просто некоторые пояснения: Если EXE имеет зависимую сборку, которую необходимо перенаправить, соответствующее имя для файла локальной политики: application.exe.config. Если это спутниковая dll, которая имеет зависимую сборку, которая нуждается в перенаправлении, файл политики называется dllname.dll.2.config - Почему .2? Я не знаю. Но он должен быть там. –