Microsoft metro 将VS2012 Windows 8 Metro解决方案转换为VS2013后未解析的符号(在Windows 8.1上)

Microsoft metro 将VS2012 Windows 8 Metro解决方案转换为VS2013后未解析的符号(在Windows 8.1上),microsoft-metro,linker-errors,visual-studio-2013,windows-8.1,Microsoft Metro,Linker Errors,Visual Studio 2013,Windows 8.1,我有一个问题,我目前无法有效解决,因为我仍然不熟悉Metro应用程序开发。所以请容忍我:) 长话短说,我有一个大型、复杂的VS2012 Metro应用程序托管+本机解决方案(目前构建在Windows 8上)进入VS2013,目标是Windows 8.1 我将解决方案导入到VS2013(托管在Windows 8.1上),并为其和其中的所有子项目运行转换。东西可以编译,但我们遇到问题的是链接器。这是我们得到的链接器错误的一个示例: error LNK2019: unresolved exte

我有一个问题,我目前无法有效解决,因为我仍然不熟悉Metro应用程序开发。所以请容忍我:)

长话短说,我有一个大型、复杂的VS2012 Metro应用程序托管+本机解决方案(目前构建在Windows 8上)进入VS2013,目标是Windows 8.1

我将解决方案导入到VS2013(托管在Windows 8.1上),并为其和其中的所有子项目运行转换。东西可以编译,但我们遇到问题的是链接器。这是我们得到的链接器错误的一个示例:

    error LNK2019: unresolved external symbol __imp___beginthreadex referenced in function <blahblahblah>
    error LNK2019: unresolved external symbol __imp___mbsrchr referenced in function <blahblahblah>
    error LNK2019: unresolved external symbol _getenv referenced in function <blahblahblah>
    error LNK2019: unresolved external symbol __imp___beginthreadex referenced in function <blahblahblah>
    error LNK2019: unresolved external symbol __imp___endthreadex referenced in function <blahblahblah>
    error LNK2019: unresolved external symbol __imp___mbsrchr referenced in function <blahblahblah>
    error LNK2019: unresolved external symbol __imp___mbsnbicmp referenced in function <blahblahblah>
    error LNK2019: unresolved external symbol __imp___dupenv_s referenced in function <blahblahblah>
错误LNK2019:函数中引用了未解析的外部符号\uuuuu imp\uuuuuu beginthreadex
错误LNK2019:函数中引用了未解析的外部符号
错误LNK2019:函数中引用了未解析的外部符号_getenv
错误LNK2019:函数中引用了未解析的外部符号_imp__beginthreadex
错误LNK2019:函数中引用了未解析的外部符号_imp___endthreadex
错误LNK2019:函数中引用了未解析的外部符号
错误LNK2019:函数中引用了未解析的外部符号_imp__mbsnbicmp
错误LNK2019:函数中引用了未解析的外部符号
问题是,对于每个“缺失”的符号,我们都可以看到声明存在于VS2013提供的MS Windows头文件中。检查每个子项目中的引用表明它们引用的是Windows“核心”库

知道为什么会这样吗?谢谢

我们可以看到,声明出现在VS2013提供的MS Windows头文件中。检查每个子项目中的引用表明它们引用的是Windows“核心”库

很难诊断出这一点信息出了什么问题,但很明显,对于这个问题,您正在寻找完全错误的角落。缺少的符号不是Windows api函数,而是C运行时支持函数。它们在C++项目中使用<>强>仅< /强>,您一直在查看.NET项目。

<> P>所以你需要关注一个生成链接器错误的项目,它是C++项目。为使其链接到包含这些符号的.lib而发出的链接器命令是完全自动的,因此不会出现太多错误。首先要做的是强制进行完整的重建,这样它就不会使用VS2012中以前的版本中遗留下来的过时的.obj和.lib文件。在项目上单击鼠标右键,然后选择“重建”

值得使用文本编辑器(如记事本)查看此项目的.vcxproj文件,并确保转换正常并进行了正确的更改:

  • ToolsVersion属性必须从“4.0”更改为“12.0”
  • MinimumVisualStudioVersion属性必须从11.0更改为12.0
  • 添加了两个新属性:ApplicationType(Windows应用商店)和ApplicationTypeRevision(8.1)
  • 每个配置的PlatformToolset属性必须从v110更改为v120
Debug\projectname.tlog
目录中有一个名为link.read.1.tlog的日志文件,其中包含诊断,它显示链接器使用的所有.lib文件。它必须包含以下行:

C:\ProgramFiles(X86)\MICROSOFT VISUAL STUDIO 12.0\VC\LIB\STORE\VCCORLIBD.LIB


这是包含这些符号的.lib文件。

谢谢。这无疑给了我一个解决这个问题的方向。让我们看看从这一点上我能找到多少。非常感谢。很好的解决方案。嘿,你能帮我解决这个问题吗?需要注意的是,在Visual Studio 2012中,用于所有应用程序的CRT lib文件位于程序文件(x86)\Microsoft Visual Studio 11.0\VC\lib中,而Visual Studio 2013中用于“Metro”(或商店)应用程序的CRT lib文件是分开的,位于C:\Program files(x86)\Microsoft Visual Studio 12.0\VC\lib\Store中。确保链接到正确的链接。