WinSxS: как установить зависимость от конкретной версии gdiplus.dll?

Мне нужно добавить зависимость от конкретной версии GDIPlus. Это версия GDI +, которую я хочу:

альтернативный текст

Я хочу быть уверен, что использую эту версию по определенной причине совместимости.

Я добавил манифест сборки в свой исполняемый файл, определяя мою зависимость от версии GdiPlus:

<dependency>
   <dependentAssembly>
      <assemblyIdentity 
            type="win32" name="Microsoft.Windows.GdiPlus" 
            pubicKeyToken="6595b64144ccf1df" 
            version="5.1.3102.2180" processorArchitecture="x86"
            language="*" />
   </dependentAssembly>
</dependency>

За исключением случаев, когда я запускаю свое приложение, загрузчик слияния Windows дает мне другую версию gdiplus.dll из папки Side-by-Side, которую я вижу в Process Explorer:

альтернативный текст

Это дает мне версию 5.02.6002.18005, а не 5.1.3102.2180.

Возникает вопрос: как мне получить зависимость от конкретной версии DLL Windows?


person Ian Boyd    schedule 04.09.2009    source источник
comment
Я неправильно написал «зависимость», я с этим справлюсь. Но я всегда использую строчную букву i, когда говорю о себе.   -  person Ian Boyd    schedule 04.09.2009
comment
Если вы проголосуете против, было бы полезно узнать, почему. Этот вопрос непонятен или бесполезен?   -  person Ian Boyd    schedule 26.11.2009


Ответы (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 будет перенаправлен на определенную версию.

person Chris Becke    schedule 05.09.2009