【问题标题】:Directing a VC++ app to use older VC80.CRT version指导 VC++ 应用程序使用较旧的 VC80.CRT 版本
【发布时间】:2011-01-05 17:54:04
【问题描述】:

我有一个 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>

【问题讨论】:

  • 我不知道有谁能够弄清楚这一点。最重要的是,貌似是张俊峰,那个写了它的该死的傻瓜。文档很糟糕而且不准确。放弃所有希望,解决真正的问题。

标签: .net binding visual-c++ version crt


【解决方案1】:

&lt;runtime&gt; 标签用于 CLR 依赖项。对原生 SxS 使用 &lt;windows&gt;。另外,我不相信 SxS 有机器配置,仅适用于 GAC/CLR。

查看我对相关问题的回答: How do I force a native application to use an older C runtime

【讨论】:

    【解决方案2】:

    Machine.config 用于 .NET 应用程序。原生 SxS 配置在 the WinSxS directory。

    您的 EXE 是否有嵌入式清单?由于 XP SP2(我认为)这些优先于外部(foo.exe.manifest)文件。

    【讨论】:

    • 看起来我们确实可以通过将清单从 exe 中拉出并(哎呀)提供我们自己的基于 762 的清单来取得进展。这个解决方案让我感觉远非温暖和模糊,但它在我们尝试过的地方已经奏效......即使我们自己采用了这种方法,感谢您在此处提供的输入和进一步的信息/支持。
    猜你喜欢
    • 1970-01-01
    • 2012-05-02
    • 2014-01-05
    • 1970-01-01
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多