我需要在特定版本的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,我在Process中可以看到:

它给了我5.02.6002.18005,而不是5.1.3102.2180.的版本
因此,问题是:如何将依赖于特定版本的Windows?
发布于 2009-09-05 15:01:25
您的“问题”是,已经安装了一个策略文件,指定对5.1.3102.2180的请求可以重定向到5.02.6002.18005。
这通常是件好事。它允许应用程序在清单中指定它们构建的版本,但是当引入关键的安全修复时,操作系统可以将应用程序重定向到兼容的版本。
所以,这里将要发生的是,您的应用程序将链接到任何只安装了5.1的PC上的GDI+ 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版本重定向到特定版本的简单方法。
https://stackoverflow.com/questions/1381028
复制相似问题