指示VC ++应用程序使用较旧的VC80.CRT版本

时间:2010-01-16 00:19:08

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

我有一个VC ++托管应用程序,它是针对VC80.CRT版本8.0.50727.762构建和测试的。我确认嵌入式清单指向762,而构建机器有762作为最新的VC80.CRT版本。

该应用程序现在也在具有762以及更高版本的运行时(4053)的计算机上运行。

顺便提一下,这两台机器都是XP专业版SP2;第二台机器(4053可以这么说)有.NET 3.0。

该应用程序适用于4053计算机,我想我明白,由于SxS下VC80.CRT附带的发布者策略,该应用程序为应用程序加载4053而不是762。

出于各种原因,我不想进入,我一直试图强迫它使用762版本,到目前为止没有成功。

无论如何,在研究了文献之后,我想我理解了确定要加载的目标版本的链:app config - >发布商政策 - >机器配置。

所以我来到myapp.exe附近放置myapp.exe.config文件(见下文);请注意将publisherPolicy设置为“no”以避免链接的第二步。

该应用程序仍然加载4053,而不是762.也许这是由于机器配置文件所说的,但我甚至无法弄清楚该文件的内容是什么意思 - 当然没有任何引用VC80.CRT或那里的任何msvc [x] 80.dll库。

我预计,引用旧版本的程序集相对容易做,是克服'dll hell'的关键 - 即使程序集发布者感觉要保证向后兼容性(通过发布者策略)。 /> 谁能摆脱光明? 感谢

<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>

2 个答案:

答案 0 :(得分:1)

Machine.config适用于.NET应用。本机SxS配置位于the WinSxS directory

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

答案 1 :(得分:1)

<runtime>标记用于CLR依赖项。将<windows>用于本机SxS。另外,我不认为SxS有机器配置,仅适用于GAC / CLR。​​

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