【问题标题】:WinSxS: How to take dependency on specific version of gdiplus.dll?WinSxS:如何依赖特定版本的 gdiplus.dll?
【发布时间】:2009-09-04 19:11:09
【问题描述】:

我需要添加对特定 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 的融合加载程序会从 Side-by-Side 文件夹中为我提供一些其他版本的 gdiplus.dll,我可以在 Process Explorer 中看到:

它给了我版本 5.02.6002.18005,而不是 5.1.3102.2180

所以问题是:如何依赖特定版本的 Windows dll?

【问题讨论】:

  • 我拼错了“依赖”,我会处理的。但我在提到自己时总是使用小写的“i”。
  • 如果您投反对票,知道原因会很有帮助。这个问题“不清楚或没有帮助”吗?

标签: windows assemblies gdi+ versioning winsxs


【解决方案1】:

您的“问题”是安装了一个策略文件,指定对 5.1.3102.2180 的请求可以重定向到 5.02.6002.18005

这通常是一件好事。它允许应用程序在其清单中指定它们构建时所针对的版本,但当引入关键安全修复程序时,操作系统可以将应用程序重定向到兼容版本。

因此,这里将发生的事情是,您的应用将链接到任何仅安装了 5.1 的 PC 上的 GDI+ 5.1。但是任何带有 5.2 GDI+ 的 PC,你都会被重定向到那个。

如果您确实有一个诚实的理由想要使用 5.1,即使 5.2 可用...我认为您可以使用应用程序配置文件来管理它。

创建一个名为 yourapp.exe.config 的文件 - 如果您的应用程序中导入 GDI+ 的模块是 dll,那么它将是 thedll.dll.2.config

我不确定如何构建 bindingRedirect。即给定策略文件重定向,我不确定您是否需要将旧版本重定向回自身,或者将新版本重定向回旧版本。或者是什么。可能需要一些试验和错误。

.config 文件中的数据与清单文件中的数据几乎一模一样。像这样的东西(它几乎完全模仿了安装在 winxs 中的策略文件的内容,即执行您不想要的重定向)。

<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 版本重定向到特定版本的简单方法。

【讨论】:

    猜你喜欢
    • 2011-06-20
    • 2016-07-29
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-25
    • 2020-10-21
    相关资源
    最近更新 更多