我有一个 VC++ 托管应用程序,它是针对 VC80.CRT 版本 8.0.50727.762 构建和测试的。我验证了嵌入式清单指向762,并且构建机器有762作为最新的VC80.CRT版本。
该应用程序现在也已在具有 762 以及更高版本的运行时 (4053) 的机器上运行。
顺便说一下,这两台机器都是 XP Pro SP2;第二台机器(可以说是 4053)具有 .NET 3.0。
该应用程序在 4053 机器上运行,我想我理解由于 SxS 下的 VC80.CRT 随附的发布者策略,该应用程序为应用程序加载 4053 而不是 762 。
由于各种我不想进入的原因,我一直试图强制它使用762版本,到目前为止没有成功。
无论如何,在研究了文献之后,我想我理解了决定要加载的目标版本的链条:app config -> publisher policy -> machine config。
所以我决定将 myapp.exe.config 文件(见下文)放在 myapp.exe 附近;请注意将 publisherPolicy 设置为“no”以避免链接的第二步。
该应用程序仍然加载 4053,而不是 762。也许这是由于机器配置文件所说的,但我什至无法开始弄清楚该文件的内容应该是什么意思——当然没有任何对 VC80 的引用.CRT 或那里的任何 msvc[x]80.dll 库。
我希望引用旧版本的程序集相对容易,这是克服“dll 地狱”的关键——即使程序集发布者感觉要保证向后兼容性(通过发布者策略)。
任何人都可以阐明吗?谢谢
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC80.CRT" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b">
</assemblyIdentity>
<publisherPolicy apply="no" />
<bindingRedirect oldVersion="*" newVersion="8.0.50727.762"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>