Visual studio 2010 - сохранить свойства проекта между различными конфигурациями сборки?

У меня есть два проекта в моем решении. В настоящее время я использую режим конфигурации по умолчанию, который является "Debug". Когда я хочу создать сборку "Release", я переключаюсь в режим Release, а затем вижу, что все мои предыдущие свойства проекта установлены в значение по умолчанию, то есть я должен добавить все свойства снова вручную в этот режим.

Есть ли удобный способ решить эту проблему в VS2010, например, чтобы скопировать все свойства, такие как include paths, макросы препроцессора, макросы сборки и т.д. из режима "Отладка" в "Release"?

Ответ 1

Настройки конфигурации хранятся в файле .vcproj/.vcxproj. Вы можете открыть его в каком-то текстовом редакторе и скопировать некоторые настройки вручную, но это было бы неудобно. Теперь вы можете просто открыть свойства проектов и скопировать эти настройки при переключении конфигурации Debug/Release в верхнем левом углу этого окна.

В следующий раз, когда вы устанавливаете свойства, которые должны быть одинаковыми для всех конфигураций, выберите Конфигурация: All Configurations, чтобы избежать проблем.

Ответ 2

Листы свойств могут решить эту проблему и несколько других проблем, связанных с собственностью.

Короче говоря, все свойства в проекте являются всего лишь узлами в документе XML, а узлы группы свойств могут иметь атрибут condition. Их легко изменить в любом текстовом редакторе, но менее известной функцией является возможность импорта других документов XML, которые могут предоставлять настройки (для всех, кроме нескольких конкретных для проекта).

В этом сообщении в блоге есть хороший учебник по использованию листов проекта, а также дополнительная информация в этот вопрос. Вы можете создавать их в Visual Studio, редактировать их (включая копирование существующих параметров проекта), а затем присоединить их к вашему проекту с помощью диспетчера свойств (а не окна свойств).

Группы в вашей таблице свойств используют тот же синтаксис, что и обычные настройки, и могут быть установлены для всех конфигураций или отфильтрованы только для некоторых приложений. Они также могут быть отфильтрованы по имени проекта и нескольким другим вещам, используя переменную и систему условий VS. Например, я использую:

<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
  <ClCompile>
    <WarningLevel>Level4</WarningLevel>
    <TreatWarningAsError>true</TreatWarningAsError>
    <Optimization>Disabled</Optimization>
    <EnablePREfast>true</EnablePREfast>
    <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
  </ClCompile>
</ItemDefinitionGroup> 

для некоторых моих сборников, примените те же настройки ко всему проекту (полный файл здесь).

Одним из наиболее удобных применений является создание каталога сборки в файле, поэтому все ваши проекты строятся равномерно в один и тот же каталог (обязательно используйте имя проекта для вывода).

Ответ 3

Управление почти всеми свойствами в нескольких разных сборках (отладка, выпуск, win32, x64 и т.д.) может выполняться с помощью единой коллекции настроек с помощью макросов.

Таким образом, перед редактированием настроек проекта убедитесь, что вы установили Configurations в All Configurations и, Platform: to All Platforms. Теперь почти все настройки могут быть выполнены таким образом во всех разных конфигурациях. Скажем, вы хотите, чтобы разные конфигурации и платформы использовали разные версии различных библиотек. Предполагая, что вы используете соглашение об именах, которое соответствует всем проектам, вы можете использовать:

Дополнительные каталоги библиотек: ..\..\foo\bar\lib\$(Platform)_$(Configuration)

Вы можете увидеть, какие макросы будут расширяться, нажав кнопку редактирования, а затем нажав кнопку Macros>>.

Ответ 4

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