警告MSB8012:确保$(OutDir),$(TargetName)和$(TargetExt)属性值与%(Link.OutputFile)中指定的值匹配

Abd*_*mad 28 warnings visual-studio-2010 visual-c++

构建我的代码时出现以下错误.

C:\ Program Files(x86)\ MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets(990,5):警告MSB8012:TargetPath(E:\ Study\FWIF\demola\ext-libs\libcommoncpp2- 1.6.0\w32\Debug\ccgnu2.dll)与链接器的OutputFile属性值g\CapeCommon14.dll不匹配.这可能会导致您的项目错误地构建.要更正此问题,请确保$(OutDir),$(TargetName)和$(TargetExt)属性值与%(Link.OutputFile)中指定的值匹配.

我希望有人会知道该怎么做.

Bro*_*own 27

您是否从以前的版本将项目升级到Visual Studio 2010?如果是这样,这是一个众所周知的问题.

Visual Studio 2010 C++项目升级指南 http://blogs.msdn.com/b/vcblog/archive/2010/03/02/visual-studio-2010-c-project-upgrade-guide.aspx

升级期间的警告

以下是转换过程中可能遇到的一些常见警告:

1)链接器输出目录

升级应用程序时可能会看到的警告之一是MSB8012:$(TargetPath)和Linker的OutputFile属性值不匹配:

  • MSB8012:$(TargetExt)('.dll')与项目配置'Debug | Win32'中链接器的OutputFile属性值'C:\ foo\Debug\MFCActiveX.ocx'('.ox')不匹配.这可能会导致您的项目错误地构建.要更正此问题,请确保$(TargetExt)属性值与%(Link.OutputFile)中指定的值匹配.

  • MSB8012:$(TargetPath)('C:\ foo\Debug\MFCActiveX.dll')与链接器的OutputFile属性值'C:\ foo\Debug\MFCActiveX.ocx'('C:\ foo\Debug\MFCActiveX)不匹配.ocx')在项目配置'Debug | Win32'中.这可能会导致您的项目错误地构建.要更正此问题,请确保$(TargetPath)属性值与%(Link.OutputFile)中指定的值匹配.

    Link.OutputFile是属性页上链接器 - >常规 - >输出文件中定义的值.默认情况下,其值为$(OutDir)$(TargetName)$(TargetExt),它与$(TargetPath)的值相同.但是,当我们从先前版本转换应用程序时,没有一种简单的方法可以转换为解析Link.OutputFile来确定$(TargetName)和$(TargetExt)的确切值,因为不同的客户可能已经格式化了他们以不同的方式.为了解决这个问题,我们决定在转换期间保留Linker.OutputFile的值.转换后,$(TargetName)将默认为$(ProjectName).$(TargetExt)将默认为应用程序类型的默认扩展名:动态库的.dll,静态库的.lib和应用程序的.exe.Link.OutputFile值将被保留.警告如果Link.OutputFile和$(TargetPath)不相同,将在转换日志中发出MSB8012.构建应用程序时,您将收到相同的警告.

    $(OutDir),$(TargetName)和$(TargetExt)分别在"常规"属性页面上显示为"输出目录","目标名称","目标扩展名".您可以手动更改这些属性的值,以便不再收到警告.

  • 如果您的项目生成导入库(链接器 - >高级 - >导入库),如果链接器输出目录不是默认输出目录,则可能需要在转换后更改导入库的输出文件夹.否则,生成的导入lib可能位于与链接器输出不同的目录中.

  • 转换后,Debugging.Command设置为默认值$(TargetPath).您可能需要进行更改,以便在F5(调试)或Ctrl + F5(无需调试时启动)时启动正确的可执行文件.


jde*_*nge 6

另请参见Stackoverflow MSB8012.将VS2008 C++项目转换为VS2012时,对我有用:右键单击解决方案资源管理器中的项目,在弹出窗口中选择属性:配置属性,链接器,常规.选择右侧的输出文件,这会给出一个下拉列表,从父项目或项目默认值中选择固有项目.单击"应用" 这给出了默认的链接器设置:$(OutDir)$(TargetName)$(TargetExt).重新构建项目,不再出现警告.

  • 与Nathan Moinvaziri对Andreas Spindler的回答的评论相同:将链接器->常规->输出文件更改为“ $(OutDir)$(TargetName)$(TargetExt)”。并将“常规”->“目标名称”设置为“ $(ProjectName)D” (2认同)

And*_*ler 5

对于调试 DLL,我也遇到了同样的问题,我希望在基本名称中有一个尾随的“D”。例如,foo.dll (Release) 但fooD.dll (Debug)。当您在调试配置的链接器设置中优化输出名称时,会出现丑陋的 MSB8012 警告。

适用于 Visual-Studio 2010 的唯一解决方案似乎是调试配置的 Postbuild-Event:

@echo off
echo Copying $(OutDir)$(TargetName)$(TargetExt) as $(TargetName)D$(TargetExt)
copy /Y $(OutDir)$(TargetName)$(TargetExt) $(OutDir)$(TargetName)D$(TargetExt)
Run Code Online (Sandbox Code Playgroud)

  • 将链接器 -> 常规 -> 输出文件更改为“$(OutDir)$(TargetName)$(TargetExt)”。并将 General -> Target Name 设置为“$(ProjectName)D” (20认同)