WinSxS: как получить зависимость от конкретной версии gdiplus.dll?
Мне нужно добавить зависимость от конкретной версии GDIPlus. Это версия GDI+, которую я хочу:
http://i31.tinypic.com/2qiv57t.jpg
Я хочу быть уверен, что я использую эту версию по конкретной причине совместимости.
Я добавил сборочный манифест в мой исполняемый файл, определяя зависимость от версии GdiPlus:
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32" name="Microsoft.Windows.GdiPlus"
pubicKeyToken="6595b64144ccf1df"
version="5.1.3102.2180" processorArchitecture="x86"
language="*" />
</dependentAssembly>
</dependency>
За исключением случаев, когда я запускаю свое приложение, загрузчик fusion для Windows предоставляет мне другую версию gdiplus.dll из папки Side-by-Side, которую я вижу в Process Explorer:
http://i29.tinypic.com/hrwitz.jpg
Это дает мне версию 5.02.6002.18005, а не 5.1.3102.2180.
Итак, вопрос: как мне взять зависимость от конкретной версии Windows DLL?
1 ответ
Ваша "проблема", такая, что это так, заключается в том, что установлен файл политики, который указывает, что запросы для 5.1.3102.2180 могут быть перенаправлены на 5.02.6002.18005
Обычно это хорошая вещь. это позволяет приложениям указывать версию, против которой они были собраны, в своем манифесте, но когда вводятся критические исправления безопасности, ОС может перенаправлять приложения на совместимые версии.
Итак, что здесь произойдет, ваше приложение будет связываться с GDI+ 5.1 на любом ПК, на котором установлена только 5.1. но любые компьютеры с 5.2 GDI+, вы будете перенаправлены на это.
Если у вас есть веская причина, по которой вы хотите использовать 5.1, даже если 5.2 доступен... Я думаю, вы можете использовать файл конфигурации приложения для управления этим.
Создайте файл с именем yourapp.exe.config - если модуль в вашем приложении, импортирующий GDI +, является dll, то это будет DLL.dll.2.config.
Однако я не уверен, как структурировать bindingRedirect. т.е. с учетом перенаправления файлов политики, я не уверен, нужно ли вам перенаправить старую версию обратно к себе, или новую версию обратно к старой версии. или что. Может потребоваться некоторое количество проб и ошибок.
Данные в файле.config выглядят почти так же, как данные в файле манифеста. Примерно так (который имитирует почти точно содержимое файла политики, установленного в winsxs, и выполняет перенаправление, которое вам не нужно).
<configuration>
<windows>
<assemblyBinding xmlns=...>
<dependentAssembly name="GdiPlus...>
<bindingRedirect oldVersion="5.1.x.x" newVersion="5.1.x.x"/>
Чтобы упростить выбор "oldVersion", он поддерживает синтаксис диапазона. так
oldVersion="5.0.0.0-5.3.0.0"
было бы простым способом гарантировать, что весь диапазон версий GdiPlus будет перенаправлен к определенной версии.