【发布时间】:2009-08-28 15:22:53
【问题描述】:
我创建了一个简单的 Win32 应用程序,通过包含对版本 6 commctl32.dll 的清单依赖来演示 XP 上的 UXtheme
然后我创建了一个简单的 Win32 dll,使用 ISOLATION_AWARE_ENABLED 构建它,并使用指定 Comctl32.dll 版本 5 和 6 的嵌入式清单对其进行测试
通过这种方法,我成功地让 exe 和 dll 使用不同版本的 comctl32.dll。 exe 使用 5 和 dll 版本 6,反之亦然。
然后,我将应用程序和 dll 重置为具有 comctl ver 5 清单依赖项。并引入了一个应用配置文件:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<configuration>
<windows>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" processorArchitecture="amd64" publicKeyToken="6595b64144ccf1df"/>
<bindingRedirect oldVersion="5.82.7100.0" newVersion="6.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
</windows>
</configuration>
现在,当我运行我的应用程序时,应用程序显然被重定向到 commctl v6 - 使用启用的 XP UXTheme 可以清楚地显示对话框。 但是,该 dll 没有被重定向,并且正在使用 commctl 的非主题版本 5。
文档中没有提到用于执行 bindingRedirects 的 per-dll 配置文件。并且尝试创建一个不会做任何事情。
我也知道从一个主要版本的程序集执行 bindingRedirect 到另一个不是受支持的方案,但我实际上只是使用 commctl32 作为测试机制的一种明显简单的方法。
如何重定向 dll 的依赖程序集的版本?
【问题讨论】: