如何强制C++编译器使用特定的CRT版本?

Ahm*_*aid 11 c++ msvcrt visual-studio-2008 visual-c++

我正在使用VS2008开发一个COM dll,它默认使用CRT版本9,但我使用的TSF(文本服务框架)与新的CRT不兼容.我认为解决方案是使用兼容的解决方案,那么如何指定CRT版本呢?

Ofe*_*lon 10

我衷心地加入了建议,不要手动更改链接的CRT版本.但是,如果由于某种原因(我无法想象)这对您来说是正确的行动方式,那么这样做的方法是更改项目的清单.

首先确保没有在每个构建上生成清单(在VS2005上:配置属性/链接器/清单文件/生成清单),因为它会覆盖您的手动更改.还要确保启用了隔离.接下来,找到清单文件 - 应该在$(IntDir)(例如,Debug).您应该看到类似于的部分 -

  <dependency>
    <dependentAssembly>
      <assemblyIdentity type='win32' name='Microsoft.VC80.DebugCRT' version='8.0.50727.762' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
    </dependentAssembly>
  </dependency>
Run Code Online (Sandbox Code Playgroud)

(当然,对于调试版本).您需要编辑CRT元素的version和publicKeyToken属性.您可以检查本地WINDOWS\WinSxS文件夹中的文件以查看可用的版本.一旦找到所需的版本,请在此处查看如何解压缩publicKeyToken.(虽然我首先尝试直接查看其他项目的清单,链接到您想要的CRT版本).

如果你去那里,期待一些粗糙的水.如果您的应用程序是一个不与其他并排组件(MFC,OpenMP等)链接的控制台应用程序,您可能会有一些运气.如果您的应用程序非常重要,如果SxS组件没有一些复杂的版本依赖性,我会感到惊讶.

(编辑)您还需要在应用程序中分发您正在使用的特定CRT.这是有人这样做的.