在Windows XP上,我有一个.exe,它在我的本地应用程序目录中运行msvcp90.dll
,msvcr90.dll
和Microsoft.VC90.CRT.manifest
。我还在C:\WINDOWS\WinSxS\Policies
中有这些.dll的策略文件,该文件由Visual C++ 2008 SP1 Redistributable Package安装。我想删除此策略文件,并在我的本地目录中使用应用程序配置文件。策略文件是:
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity type="win32-policy" name="policy.9.0.Microsoft.VC90.CRT" version="9.0.30729.1" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"/>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC90.CRT" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"/>
<bindingRedirect oldVersion="9.0.20718.0-9.0.21022.8" newVersion="9.0.30729.1"/>
<bindingRedirect oldVersion="9.0.30201.0-9.0.30729.1" newVersion="9.0.30729.1"/>
</dependentAssembly>
</dependency>
</assembly>
我的配置文件是:
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC90.CRT" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"/>
<bindingRedirect oldVersion="9.0.20718.0-9.0.21022.8" newVersion="9.0.30729.1"/>
<bindingRedirect oldVersion="9.0.30201.0-9.0.30729.1" newVersion="9.0.30729.1"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
使用配置文件而不是策略文件时,Dependency Walker会报告并排错误 - 出了什么问题?此外,配置文件应该命名为<application>.exe.config
还是Microsoft.VC90.CRT.config
?
(为了澄清,使用策略文件时不会出现错误。但是,此处的客户端不允许安装可再发行组件包。
应用程序配置文件的MSDN docs状态可以重定向应用程序以使用同一程序集的不同版本(per-application configuration),并且如果需要,它可以覆盖现有策略(发布者配置)文件。所以我认为必须可以使用本地应用程序配置文件,并且上面文件中的内容丢失或不正确。)
答案 0 :(得分:2)
您的配置数据位于<runtime>
节点下。它应该在<windows>
节点下。
我必须提醒我们,不鼓励运送包含绑定重定向的应用程序配置文件,并且系统管理员打算在他们管理的计算机上处理appcompat问题。应用程序开发人员应该创建他们的应用程序以使用他们所依赖的CRT的特定版本的最新版本,并使用该版本附带的默认全局策略。
实际上,从Windows 2003开始,在应用程序配置文件中使用绑定重定向需要在应用程序兼容性数据库中输入一个条目。
答案 1 :(得分:0)
据我了解,出于安全原因,无法以这种方式重定向c运行时。您可以选择静态地将运行时构建到项目中,或者在不带并排系统的情况下从应用程序目录加载DLL。