我相信这些差异特定于 VS 2008 RTM 与 SP1。
清单将指定代码的意图、必要的权限等。但是,即使清单不存在,系统也会检测依赖关系。您的程序依赖于 VC90 版本 9.0.21022.8 或更高版本。这是唯一的担忧。然而,app.config 可以协助绑定的特定版本,类似于以下内容:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<configuration>
<windows>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC90.CRT" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"/>
<bindingRedirect oldVersion="9.0.30729.1" newVersion="9.0.21022.8"/>
</dependentAssembly>
</assemblyBinding>
</windows>
</configuration>
在 app.manifest 中,您可以设置 _BIND_TO_CURRENT_VCLIBS_VERSION 来控制它。
.h 和 .lib 文件确定依赖关系。
--> 编辑:
关于您对名称损坏的入口点 _Xbad@tr1@std@@YAXW4error_type@regex_constants@12@@Z 的评论:
(未修饰是 void std::tr1::_Xbad(enum std::tr1::regex_constants::error_type))
其实在后来的SP1 MSVCP90.DLL (9.0.30729.17) 中发现Ordinal: 1513 (0x05E9)
但是它不位于较旧的 RTM 版本 (9.0.21022.8) 中(使用依赖遍历器查看入口点)
您必须使用最新的 .h 和 .lib 编译您的代码,以便链接器解析该函数,所以很奇怪为什么您的依赖版本不会更新,因为您的代码需要旧版本中不存在的函数。我会确保您的依赖项针对较新的版本。我希望这有帮助。