我创建了一个简单的Win32应用程序,通过在ver 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的非主题ver 5。
在文档中没有提到用于执行bindingRedirects的per-dll配置文件。并试图创建一个没有做任何事情。
我也知道从一个主要版本的程序集到另一个程序集执行bindingRedirect不是受支持的方案,但我真的只是使用commctl32作为测试机制的一种明显简单的方法。
如何重定向dll的从属程序集的版本?
答案 0 :(得分:4)
Windows Vista甚至无法访问.manifest或.config文件 稍后添加,因为它缓存它们的存在以及日期时间 exe的邮票。
我发现注销/启动似乎可以清除触发器再次读取配置文件。
答案 1 :(得分:3)
所以,这个问题已得到解答。
毕竟我发现LoadLibrary在加载dll时会探测.config文件:
full_path_to_dll\dllname.dll.2.config
将处理此文件中的绑定重定向。