Per Application Config File Bindingredirect не применяется к DLLS
Вопрос
Я создал простое приложение Win32, чтобы продемонстрировать Uxtheme на XP, включив манифестную зависимость от VER 6 Commctl32.dll I Затем создал простой DLL Win32, построил его с ISOLATION_AWARE_ENABLED
, и протестировал его со встроенным манифестом, указав как версию 5 и 6 Comctl32.dll
Я успешно получил EXE и DLL, чтобы использовать разные версии COMCTL32.dll, используя этот метод. Оба с EXE с использованием 5 и DLL версии 6, так и наоборот.
Затем я сбрасываю приложение и DLL, чтобы иметь зависимость от 5. И представил файл конфигурации приложения:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<configuration>
<windows>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" processorArchitecture="amd64" publicKeyToken="6595b64144ccf1df"/>
<bindingRedirect oldVersion="5.82.7100.0" newVersion="6.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
</windows>
</configuration>
Теперь, когда я запускаю свое приложение, приложения явно перенаправляются на COMMCTL V6 - диалоги четко отображаются с использованием включенного XP UXTheme. Тем не менее, DLL не перенаправляется и использует не тематическую версию 5 CommCtl.
В документации нет упоминания о файлах конфигурации для каждого DLL для выполнения BudingReadRects. И попытка создать его ничего не делает.
Я также знаю, что выполнение переплета из одной крупной версии сборки в другую не является поддерживаемым сценарием, но я действительно просто использую Commctl32 в качестве очевидного простого способа проверки механики.
Как перенаправить версию зависимой сборки DLL?
Решение 2
Итак, на этот вопрос ответил.
- Я использовал монитор процесса для отслеживания доступа к файлу,
- Понимая, что доступ к файлам .manifest и .config поступает из csrss.exe не моего собственного процесса,
- И Windows Vista даже не будет доступа к. Manifest или .config Files, которые добавляются позже, поскольку он кэширует их существование вместе с маркой даты времени для EXE.
После всего этого я обнаружил, что LoadLibrary дает исследование файла .config при загрузке DLL:
full_path_to_dll\dllname.dll.2.config
Переписка перенаправления в этом файле будут обработаны.
Другие советы
И Windows Vista даже не будет доступа к. Manifest или .config Files, которые добавляются позже, поскольку он кэширует их существование вместе с маркой даты времени для EXE.
Я обнаружил, что журнал OFF/ON, кажется, очищает триггеры, который будет прочитать файл конфигурации.