4

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

替代文字

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

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

4

1 回答 1

3

您的“问题”是安装了一个策略文件,指定对 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 版本重定向到特定版本的简单方法。

于 2009-09-05T15:01:25.117 回答