每个应用程序配置文件bindingRedirect不适用于Dll

时间:2009-08-28 15:22:53

标签: windows manifest sxs

我创建了一个简单的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的从属程序集的版本?

2 个答案:

答案 0 :(得分:4)

  

Windows Vista甚至无法访问.manifest或.config文件   稍后添加,因为它缓存它们的存在以及日期时间   exe的邮票。

我发现注销/启动似乎可以清除触发器再次读取配置文件。

答案 1 :(得分:3)

所以,这个问题已得到解答。

  • 我使用Process Monitor跟踪文件访问,
  • 在意识到对.manifest和.config文件的访问来自csrss.exe而不是我自己的进程之后,
  • Windows Vista甚至不会访问.manifest或.config文件,这些文件稍后会添加,因为它会缓存它们以及exe的日期时间戳。

毕竟我发现LoadLibrary在加载dll时会探测.config文件:

full_path_to_dll\dllname.dll.2.config

将处理此文件中的绑定重定向。