Подтвердить что ты не робот

Предупреждение MSB8012: убедитесь, что значения свойств $(OutDir), $(TargetName) и $(TargetExt) соответствуют значению, указанному в% (Link.OutputFile)

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

C:\Program Files (X86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets(990,5): предупреждение MSB8012: TargetPath (E:\Study\FWIF\Demola\внутр-ЛИЭС\libcommoncpp2-1.6.0\w32\Debug\ccgnu2.dll) не соответствует значению свойства Linker OutputFile г \CapeCommon14.dll). Это может привести к неправильному построению вашего проекта. Чтобы исправить это, убедитесь, что $(OutDir), $(TargetName) и Значения свойств $(TargetExt) соответствуют значению, указанному в % (Link.OutputFile).

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

4b9b3361

Ответ 1

Вы обновили проект до Visual Studio 2010 из предыдущей версии? Если это так, это хорошо известная проблема.

Руководство по обновлению проекта Visual Studio 2010 С++ http://blogs.msdn.com/b/vcblog/archive/2010/03/02/visual-studio-2010-c-project-upgrade-guide.aspx

Предупреждения во время обновления

Вот некоторые из распространенных предупреждений, которые вы можете запустить во время преобразования:

1) Каталог выходных данных компоновщика

Одно из предупреждений, которые вы можете увидеть при обновлении ваших приложений, - это значение MSB8012: $(TargetPath) и Linkers OutputFile не соответствует:

  • MSB8012: $(TargetExt) ('.dll') не соответствует значению свойства Linker OutputFile 'C:\foo\Debug\MFCActiveX.ocx' ('.ocx') в конфигурации проекта 'Debug | Win32'. Это может привести к неправильному построению вашего проекта. Чтобы исправить это, убедитесь, что значение свойства $(TargetExt) соответствует значению, указанному в% (Link.OutputFile).

  • MSB8012: $(TargetPath) ('C:\foo\Debug\MFCActiveX.dll') не соответствует значению свойства Linker OutputFile 'C:\foo\Debug\MFCActiveX.ocx' ('C:\foo\Debug\MFCActiveX.ocx ') в конфигурации проекта' Debug | Win32 '. Это может привести к неправильному построению вашего проекта. Чтобы исправить это, убедитесь, что значение свойства $(TargetPath) соответствует значению, указанному в% (Link.OutputFile).

    Link.OutputFile - это значение, определенное в файле Linker → General → Output на странице свойств. По умолчанию его значение равно $(OutDir) $(TargetName) $(TargetExt), что совпадает с значением $(TargetPath). Однако, когда мы конвертируем приложение из предыдущей версии, нет простого способа конвертации для разбора Link.OutputFile, чтобы выяснить, какие именно значения для $(TargetName) и $(TargetExt), поскольку разные клиенты могут отформатировать их по-разному. Чтобы обойти это, мы решили сохранить значение Linker.OutputFile во время преобразования. После преобразования значение $(TargetName) будет по умолчанию равно $(ProjectName). $(TargetExt) по умолчанию будет использовать расширение по умолчанию для типа приложения:.dll для Dynamic Library,.lib для статической библиотеки и .exe для приложения. Значение Link.OutputFile будет сохранено. Предупреждение MSB8012 будет выпущено в журнале конверсии, если Link.OutputFile и $(TargetPath) не совпадают. При создании приложения вы получите те же предупреждения.

    $ (OutDir), $(TargetName) и $(TargetExt) отображаются на странице свойств General, как "Output Directory", "Target Name", "Target Extension", соответственно. Вы можете вручную изменить значения этих свойств, чтобы вы больше не получали предупреждение.

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

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

Ответ 2

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

Единственное решение, которое работает с Visual-Studio 2010, похоже, является Postbuild-Event для Debug-Configuration:

@echo off
echo Copying $(OutDir)$(TargetName)$(TargetExt) as $(TargetName)D$(TargetExt)
copy /Y $(OutDir)$(TargetName)$(TargetExt) $(OutDir)$(TargetName)D$(TargetExt)

Ответ 3

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

Ответ 4

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

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

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

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

Ответ 5

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

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