我需要添加一个特定版本的GDIPlus的依赖。 这是我想要的GDI +的版本:
替代文字http://img.zgserver.com/windows/2qiv57t.png
我想确定我正在使用此版本的特定兼容性原因。
我已经添加了一个程序集清单给我的可执行文件,定义了我对GdiPlus版本的依赖 :
<dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.GdiPlus" pubicKeyToken="6595b64144ccf1df" version="5.1.3102.2180" processorArchitecture="x86" language="*" /> </dependentAssembly> </dependency>
除了当我运行我的应用程序,Windows的融合加载器给我一些其他版本的并行文件夹,我可以看到在Process Explorer中的gdiplus.dll:
替代文字http://img.zgserver.com/windows/hrwitz.png
它给我版本5.02.6002.18005 ,而不是5.1.3102.2180 。
所以问题是:我如何依赖于特定版本的Windows DLL?
您的“问题”,就是说,安装了一个策略文件,指定5.1.3102.2180的请求可以重定向到5.02.6002.18005
这通常是一件好事。 它允许应用程序指定它们在清单中构建的版本,但是当引入重要的安全修复程序时,操作系统可以将应用程序重定向到兼容的版本。
所以,这里将发生的事情是,你的应用程序将在任何只有5.1安装的PC上与GDI + 5.1链接。 但任何具有5.2 GDI +的PC,都将被重定向到那个位置。
如果你确实有一个诚实善良的理由,即使在5.2版本可用的情况下,为什么要使用5.1,我想你可以使用一个应用程序配置文件来管理它。
创建一个名为yourapp.exe.config的文件 – 如果你的应用程序中导入GDI +的模块是一个dll,那么它将是thedll.dll.2.config
但我不确定如何构建bindingRedirect。 即给定策略文件重定向,我不知道如果你需要重定向旧版本本身,或新版本回旧版本。 或者是什么。 一些试验和错误可能是必需的。
.config文件中的数据与清单文件中的数据几乎完全相同。 像这样的东西(几乎完全模仿安装在winsxs中的策略文件的内容,这是做你不想要的重定向)。
<configuration> <windows> <assemblyBinding xmlns=...> <dependentAssembly name="GdiPlus...> <bindingRedirect oldVersion="5.1.xx" newVersion="5.1.xx"/>
为了使“oldVersion”的选择更容易,它支持范围语法。 所以
oldVersion="5.0.0.0-5.3.0.0"
将是一个简单的方法来确保一整个GdiPlus版本被重定向到一个特定的版本。