предупреждение MSB8012: убедитесь, что значения свойств $ (OutDir), $ (TargetName) и $ (TargetExt) соответствуют значению, указанному в% (Link.OutputFile) - PullRequest
28 голосов
/ 21 декабря 2010

При создании кода я получаю следующую ошибку.

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) не соответствует значению свойства выходного файла компоновщика g \ CapeCommon14.dll).Это может привести к неправильной сборке вашего проекта.Чтобы исправить это, убедитесь, что значения свойств $ (OutDir), $ (TargetName) и $ (TargetExt) соответствуют значению, указанному в% (Link.OutputFile).

Я надеюсь, что какой-то одинбудет знать, что делать.

Ответы [ 5 ]

26 голосов
/ 07 марта 2011

Обновили ли вы проект до 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) и значение свойства OutputFile компоновщика.не соответствует:

  • MSB8012: $ (TargetExt) ('.dll') не соответствует значению свойства OutputFile компоновщика 'C: \ foo \ Debug \ MFCActiveX.ocx' ('.ocx ') в конфигурации проекта' Debug | Win32 '.Это может привести к неправильной сборке вашего проекта.Чтобы исправить это, убедитесь, что значение свойства $ (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 - это значение, определенное в Linker -> General -> Output File настраница свойств.По умолчанию его значение равно $ (OutDir) $ (TargetName) $ (TargetExt), что совпадает со значением $ (TargetPath).Однако, когда мы конвертируем приложение из предыдущей версии, не существует простого способа преобразования для анализа Link.OutputFile, чтобы выяснить, какие именно значения имеют значения для $ (TargetName) и $ (TargetExt), поскольку разные клиенты могли отформатироватьих по-разному.Чтобы обойти это, мы решили сохранить значение Linker.OutputFile во время преобразования.После преобразования $ (TargetName) по умолчанию будет $ (ProjectName).$ (TargetExt) по умолчанию будет расширением по умолчанию для типа приложения: .dll для динамической библиотеки, .lib для статической библиотеки и .exe для приложения.Значение Link.OutputFile будет сохранено.Предупреждение MSB8012 будет выдан в журнале преобразования, если Link.OutputFile и $ (TargetPath) не совпадают.При создании приложения вы получите те же предупреждения.

    $ (OutDir), $ (TargetName) и $ (TargetExt) отображаются на странице свойств «Общие», как «Выходной каталог», «Имя цели"," Расширение цели ", соответственно.Вы можете вручную изменить значения этих свойств, чтобы вы больше не получали предупреждение.

  • Если ваш проект создает библиотеку импорта (Linker -> Advanced -> Import Library), вам может потребоватьсяизменить выходную папку библиотеки импорта также после преобразования, если выходной каталог компоновщика не является выходным каталогом по умолчанию.В противном случае сгенерированная библиотека импорта может находиться в другом каталоге, чем вывод компоновщика.

  • Debugging.Command после преобразования устанавливается в значение по умолчанию $ (TargetPath).Возможно, вам придется внести изменения, чтобы при запуске F5 (отладка) или Ctrl + F5 (запуск без отладки) запускался правильный исполняемый файл.

6 голосов
/ 19 апреля 2015

См. Также здесь Stackoverflow MSB8012 . Что сработало для меня при преобразовании проекта VS2008 C ++ в VS2012: щелкните правой кнопкой мыши проект в обозревателе решений, выберите свойства во всплывающем окне: свойства конфигурации, компоновщик, общие. Выберите Выходной файл справа, это даст раскрывающийся список, выберите неотъемлемую часть родительского или проекта по умолчанию. Нажмите применить. Это дает настройку компоновщика по умолчанию: $ (OutDir) $ (TargetName) $ (TargetExt). Перестройте проект, и предупреждение больше не должно появляться.

4 голосов
/ 29 августа 2011

У меня возникла та же проблема с отладочными библиотеками DLL, что я хотел иметь конечную букву "D" в базовом имени. Например, foo.dll (выпуск), но fooD.dll (отладка). Когда вы уточняете имя вывода в настройках компоновщика конфигурации отладки - появляется некрасивое предупреждение MSB8012.

Единственное решение, которое работает с Visual-Studio 2010, - это событие Postbuild для конфигурации отладки:

@echo off
echo Copying $(OutDir)$(TargetName)$(TargetExt) as $(TargetName)D$(TargetExt)
copy /Y $(OutDir)$(TargetName)$(TargetExt) $(OutDir)$(TargetName)D$(TargetExt)
3 голосов
/ 16 декабря 2015

У меня был сценарий, в котором имя моего исполняемого файла отличалось от имени проекта, и я хотел, чтобы он собрал исполняемый файл / dll в другом месте, отличном от того, где находился проект.

1) Измените имя проекта по умолчанию на другое. Общие-> Имя_целевого_объекта
<имя моего исполняемого файла>

2) Вывод в другое место, где я хочу построить исполняемый файл. Общие-> OutputDirectory <моё новое местоположение находится здесь>

3) Обновите настройки компоновщика. Linker-> Общие новое значение: $ (OutDir) $ (TargetName) $ (TargetExt)
Это берет новые настройки от 1 и 2.

1 голос
/ 11 января 2013

Я получил ту же ошибку после преобразования из старого проекта в VS 2010.

Чтобы исправить это, я создал пустой проект того же типа (например, .dll, .lib, .exe).
ЗатемЯ скопировал значения по умолчанию в свойствах проекта в свой проект для выходного каталога, промежуточного каталога и выходного файла

...