У меня есть необходимость удалить и переименовать выбранные конфигурации решений / проектов в Visual Studio, есть ли инструмент, который поможет с этим?
Краткий ответ: Нет.
Длинный ответ: Сортировка (например, вы собираетесь интегрировать вспомогательные инструменты, которыенеполный и напишите пользовательские сценарии / работы для создания / интеграции в процесс управления конфигурацией).
Ред. коммент .: Отличный вопрос, многие люди пострадали от этого (как отметили «upvotes»)на ваш вопрос), и мы все будем любить хороший ответ.
Я считаю встроенный инструмент очень бесполезным.Например, когда я удаляю конфигурацию из решения, она отказывается удалять связанные конфигурации проекта на тот случай, если они нужны где-то еще.Переименование конфигурации решения также не приведет к переименованию связанных с ним конфигураций.
Согласовано - встроенный инструмент совершенно бесполезен.Очень сложно поддерживать множество проектов и решений с разными конфигурациями и наборами зависимостей, особенно для разных целевых типов / платформ.Он обладает уникальными особенностями, такими как использование нескольких идентификаторов GUID для проектов, наборов файлов и типов проектов, которые хранятся в реестре и доступны из *.sln
и *.vcproj
.Инструмент попытается «излечить» себя с помощью этих уникальных идентификаторов, отменив изменения и игнорируя некоторые из своих собственных значений, чтобы «восстановить» связи между проектами / решениями.Это приводит к большому «бесполезности» в вашем реестре и файлах конфигурации, ненужным изменениям в файлах, если вы проверяете их в своей системе контроля версий, и к сценариям, когда многие части файла будут «игнорироваться», дажехотя вы (правильно) внесли эти изменения.Некоторые данные, такие как « имя проекта » и « имя конфигурации проекта » и « имя платформы проекта », иногда являются избыточными, а иногда нет.Из-за GUID этот тип «внешнего / ручного обслуживания» позволяет очень просто «отображать» ваш проект / решение, ссылаясь на правильный проект (по имени), но на НЕПРАВИЛЬНЫЙ проект (как однозначно идентифицируется по GUID, который былрешается через ссылку в реестре).Кроме того, существует более чем один способ указать одно и то же в этих файлах, что приводит к путанице (тем более что файловая онтология *.sln
/ *.vcproj
плохо документирована и вряд либыть хорошо задокументированными в будущем).
Короче говоря, MSVS - это довольно хорошая IDE, но она ужасна для сборки и управления / сопровождения проектов. Кажется, ей не хватает сильного центрального дизайна.Я признаю, что это (очень) трудная проблема - люди работали над «сборкой» десятилетиями, и ИМХО современное состояние не очень хорошее.Тем не менее, MSVS - это, безусловно, «проектный комитет», включающий переход от эволюции к основным полевым пересмотрам.
Таким образом, «самый правильный» ответ на ваш вопрос - «нет»: MSVS не предназначен для того, чтобы делать то, что вы хотите (например, для поддержки конфигураций решений / проектов в MSVS).Тем не менее, я уверен, что Microsoft ответит так: «Мы предоставили вам .NET API, чтобы вы могли сами написать свой ответ и написать свои собственные инструменты».Однако после большого исследования этой темы, IMHO, не существует подходящего решения для этих типов инструментов, использующих API этих типов (хотя вы можете подключиться и с большим усилием написать свои собственные инструменты, чтобы упростить это обслуживание.)
MSVS2010 улучшается, но все еще не подходит для управления сборкой и конфигурацией проекта.Новые API полезны, но они сложны, и ИМХО не очень хорошо разработаны.Скорее всего, Microsoft никогда не будет серьезно заниматься этим аспектом среды IDE: это среда IDE, предназначенная для ускоренной итерации разработки и не предназначенная для сопровождения сборки проекта и решения.(Подробнее об этой теме можно узнать, если углубиться в форумы MSDN).
Должен быть лучший способ сделать это.Есть ли альтернативные инструменты?
Да и да: для всех систем сборки проблема заключается в «данных записи», которые вы хотите дляконфигурация: эти файлы, эти определенные макросы, эти аргументы командной строки, этот тип цели и т. д. Из этого (который проверяется вашим исходным кодом) должны быть сгенерированы «фактические» файлы / сценарии сборки.
Конечно, я только что описал CMake (который генерирует "файлы сборки" из исходного файла данных записи) и множество других инструментов.Это ваша лучшая ставка.В этом случае CMake хорошо генерирует файлы *.sln
и *.vcproj
, но не так много других инструментов (это довольно сложно из-за сложности этих файлов и их в значительной степени плохо документированных деталей).).Еще один инструмент, который неплохо справляется с генерацией *.vcproj
- это qmake (который является хорошим инструментом менеджера конфигурации сборки, даже если вы не используете библиотеки Qt).Другая (похожая идея) - это « gyp » от Google (сокращение от «generate-your-projects», которое должно генерировать файлы *.sln
/ *.vcproj
, но я не уверен, что оно готово к «премьер»time ".
Для всех этих инструментов рабочий процесс подразумевает:
- Обновление файлов данных записи;
- (Повторное) создание
*.sln
/ *.vcproj
файлов. - Используйте сгенерированные файлы
*.sln
/ *.vcproj
в вашей среде MSVS или сборке из командной строки.
Если вы неЯ не хочу внешнего инструмента, но предпочел бы иметь какой-нибудь «плагин», который изначально работает с вашими *.sln
/ *.vcproj
файлами, я ничего не знаю, чтобы помочь вам (и я посмотрел).Это не новая мысль: существуют некоторые инструменты для работы с этими файлами изначально (например, инструменты «переноса версий», которые некоторые люди пишут и делятся), и некоторые люди говорили о системе сборки, изначально «закрепленной» на этих файлах, какзаписываемые данные, но эти файлы представляют собой беспорядок, недокументированные и движущуюся цель в отношении версий MSVS, иплохо решите централизованный вопрос о централизованных настройках сборки с переопределением локального проекта, так что это действительно сложно сделать.(В настоящее время не существует такой системы сборки, которая "привязана" к собственным файлам MS, кроме MSVS, я не думаю.)
MSVS2010 делает создание такого плагина "более простым"чем предыдущие выпуски MSVS, но я не думаю, что такой плагин еще существует (и при этом я не думаю, что такой обобщенный плагин имеет высокую вероятность успеха, потому что то, что вы запрашиваете, не является приоритетом для MSVS, который является преимущественно IDE, а не менеджером конфигурации).Скорее всего, вам, скорее всего, придется покопаться в .NET API, чтобы написать свой собственный (нетривиальная работа и обслуживание), или попытаться опираться на Свойства проекта Visual Studio (но я не думаю, чтоэто даст вам то, что вы хотите).
Наконец, (не по теме) я пишу такой инструмент, который опирается на эвристику для автоматического создания и автоматического поддержания этих типов зависимостей проекта, и в настоящее время я пишу *.sln
/ *.vcproj
файлы.Он не готов к работе в «прайм-тайм», но меня будут интересовать ваши проблемы с управлением конфигурацией проекта, и я хочу поделиться этими инструментами, если они окажутся полезными для вас (это личное хобби для разработчиков на C ++, в настоящее время Windows)., но следует без особых усилий портировать на Posix).