【发布时间】:2016-11-15 11:11:27
【问题描述】:
我们最近将基于 MFC 的大型项目套件从 Visual Studio 2005/2008 转换为 Visual Studio 2012(更新 5)。我们的项目以前使用一组特定于配置的清单文件,作为资源嵌入,以指定要加载的并排 (SxS) 程序集的确切版本。例如,下面是 VC90 运行时的旧清单文件之一的 sn-p:
<assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.30729.1" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
以前,我可以将上述标识与位于 C:\Windows\WinSxS 的文件夹相关联。例如,文件夹“x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.1_none_e163563597edeada”包含正确的二进制文件。
如您所见,文件夹名称包含填充 assemblyIdentity 节点属性所需的所有信息。不幸的是,this(过时的)文章证实了我的发现,即微软不再以这种方式存储 VC2010+ SxS 文件。 我想告诉我们的项目针对最新的 Microsoft Visual C++ 2012 Redistributable(安装程序 v11.0.61030.0)运行。如何找到这些二进制文件的正确名称/版本/publicKeyToken 信息?我找不到 MSDN 列表或类似内容。
请注意,我一直在使用 sxstrace.exe / Dependency Walker 等来调查此问题。我可以确认清单文件已适当地嵌入到我们的可执行文件中;问题只是清单文件指定不正确。
提前致谢!
【问题讨论】:
标签: c++ visual-studio-2012 mfc manifest msvcrt