2017 Перезапуск. Yay.
TL; DR
Этот параметр устанавливает значение по умолчанию (a) для фактического Link Library Dependecies
для каждой ссылки на проект. Если для каждой ссылки на проект установлено LinkLibraryDependecies
, то это бессмысленно.
Однако при добавлении новой ссылки по умолчанию (в VS2010 и 2015) новый элемент <ProjectReference>
в файле vcxproj
не имеет , а не имеет настройки, поэтому эта опция актуальна в что он обеспечивает значение по умолчанию для всех вновь добавленных ссылок, если их значение не изменено.
(a): действительно должно быть одинаковым для всех конфигураций (отладка / выпуск) и платформ (Win32 / x64), иначе все будет очень сложно.
подробности Гори
Ганс указал , что выглядит , чтобы ничего не делать в VS2010 как таковом . Однако это не означает, что он фактически не используется VS / MSBuild.
Суть в том, как эта опция вставляется в файл vcxprj
и как работают значения по умолчанию для параметра <ProjectReference>
в файле msbuild.
Настройка в диалоговом окне компоновщика, как показано выше, вставляется как:
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
...
<ItemDefinitionGroup>
<ClCompile>
...
</ClCompile>
<Link>
...
</Link>
<ProjectReference>
<LinkLibraryDependencies>This option is not used by VS 2010!</LinkLibraryDependencies>
</ProjectReference>
...
</ItemDefinitionGroup>
</Project>
И хотя кажется каким-то образом сгруппированным вместе с опцией Link
, это просто для того, чтобы сбить вас с толку.
Что на самом деле делает в данном файле vcxproj
(или при получении из файла .props
), так это установка значения по умолчанию Link Library Dependencies
Значение для каждой зависимости проекта от раздела Frameworks and References
в диалоге настроек VS2010 VC -
- или в поддереве ссылок VS2015 -
И это важно, потому что при добавлении новой ссылки на проект запись по умолчанию в вашем файле vcxproj
будет выглядеть следующим образом:
...
<ItemGroup>
<ProjectReference Include="..\W32DynLib1\W32DynLib1.vcxproj">
<Project>{96be134d-acb5-....-....-....bb6fe4a7}</Project>
</ProjectReference>
</ItemGroup>
Вы заметите, что здесь отсутствует подэлемент <LinkLibraryDependecies>true|false</..>
: это означает, что вы "глобальные" настройки фактически будете использоваться для установки значения по умолчанию.
Если ваш глобальный параметр равен false
(или No
), ссылка на проект не будет ссылаться ни на что. Если это true
, это будет ссылка.
Более того:
- Если этот параметр,
LinkLibraryDependency
, полностью отсутствует в ваших настройках, по умолчанию будет true (из файла Microsoft.Cpp[.Common].props
в папке MSBuild).
- Если в ваших глобальных настройках указано значение
This is not used
, будет интерпретировано как истинное .
- Если у вас есть значение
False is the new truth!
или, возможно, No way
в этом параметре, оно будет также интерпретироваться как истинное при сборке.
- Интерфейс VS2015 отображает предупреждение, если он не может интерпретировать строку здесь:
- Интерфейс VS2010 будет отображать Ложь для ВСЕХ значений, кроме
false
, хотя при интерпретации проекта это интерпретируется как true .
Что еще больше:
кажется , что при преобразовании старых решений с файлами vcproj
конвертер будет использовать старые зависимости, указанные в sln
, и значение параметра Linker проекта vcproj
, и фактически установите LinkLibraryDependency
для каждого ProjectReference
, который он вставляет в новый vcxproj
- это одна из причин, по которой я думал, что это недействительный вариант так долго - большинство наших проектов имеют историю переходов, восходящую к VS2005.