我们最近将一个基于MFC的大型项目套件从Visual Studio 2005/2008转换为Visual Studio 2012(Update 5)。我们的项目以前使用一组特定于配置的清单文件(作为资源嵌入)来指定要加载的并行(SxS)程序集的确切版本。例如,下面是VC90运行时的一个旧清单文件的片段:
<assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.30729.1" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
以前,我可以将上面的标识与C:\ Windows \ WinSxS中的文件夹相关联。一个例子是文件夹&#34; x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.1_none_e163563597edeada&#34;其中包含正确的二进制文件。
如您所见,文件夹名称包含填充assemblyIdentity节点属性所需的所有信息。遗憾的是,this(过时的)文章证实了我的调查结果,即微软不再以这种方式存储VC2010 + SxS文件。 我想告诉我们的项目是针对最新的Microsoft Visual C ++ 2012 Redistributable(安装程序v11.0.61030.0)运行的。如何找到这些二进制文件的正确名称/版本/ publicKeyToken信息?我找不到MSDN列表或类似名称。
请注意,我一直在使用sxstrace.exe / Dependency Walker等来调查此问题。我可以确认清单文件已正确嵌入我们的可执行文件中;问题是只有清单文件被错误地指定。
提前致谢!
答案 0 :(得分:0)
看看this。正如我记得的,默认情况下,您的应用程序将链接到您的Windows SDK中的库。要使项目使用默认库,只需在项目文件中删除有关它们的信息,或使用默认设置重新创建项目。