我创建了一个简单的 Win32 应用程序,通过包含对版本 6 commctl32.dll 的清单依赖项来演示 XP 上的 UXtheme 然后我创建了一个简单的 Win32 dll,使用 构建它ISOLATION_AWARE_ENABLED
,并使用指定 Comctl32 版本 5 和 6 的嵌入式清单对其进行测试.dll
我使用这种方法成功地让 exe 和 dll 使用不同版本的 comctl32.dll。使用 5 的 exe 和 6 版的 dll,反之亦然。
然后,我将应用程序和 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 配置文件。并且尝试创建一个不会做任何事情。
我也知道从一个主要版本的程序集到另一个版本的绑定重定向不是受支持的场景,但我真的只是使用 commctl32 作为测试机制的一种明显简单的方法。
如何重定向 dll 的依赖程序集的版本?