Редактор условных проектов Visual Studio - PullRequest
2 голосов
/ 19 декабря 2011

У меня есть проект, который содержит много ссылок, и все они условны, покажите, что я вручную отредактировал файлы Proj, как показано ниже,

  <ItemGroup Condition=" '$(Configuration)' == 'Release' ">
    <Reference Include="Assembly1">
      <HintPath>..\Release\Path\Assembly1</HintPath>
    </Reference>
    <Reference Include="Assembly2">
      <HintPath>..\Release\Path\Assembly2</HintPath>
    </Reference>
  </ItemGroup>
  <ItemGroup Condition=" '$(Configuration)' == 'Debug' ">
    <Reference Include="Assembly1">
      <HintPath>..\Debug\Path\Assembly1</HintPath>
    </Reference>
    <Reference Include="Assembly2">
      <HintPath>..\Debug\Path\Assembly2</HintPath>
    </Reference>
  </ItemGroup>

Обратите внимание, что это всего лишь пример, только две конфигурации,Выпуск и отладка, в настоящее время у нас есть 4 конфигурации на платформу, и мы имеем дело с хранением около 12 конфигураций, 3 для .NET 3.5, .NET 4 и .NET 4.5

Интересно, есть ли какой-нибудь другой лучший способтогда это?

  1. Есть ли какой-нибудь плагин для Visual Studio, который позволяет нам делать эти конфигурации в каком-то интерфейсе, а не редактировать XML, потому что он становится сложным изо дня в день.
  2. Есть ли какие-либо сценарии в MSBuild или что-либо, что может, вероятно, читать какой-то пользовательский xml или хранилище данных, и мы можем автоматизировать этот процесс?
  3. Если я создаю другой файл VSProj для другой конфигурации, то проверка содержимого занимает очень много временифайлы добавляются правильно, но единственными проблемами являются ссылки.
  4. Есть ли другой инструмент?Что может легко управлять ссылками для каждой конфигурации?

Моя главная задача - хранение и управление ссылками в соответствии с типами конфигурации.

1 Ответ

4 голосов
/ 20 декабря 2011

Я бы сделал это:

В файле с именем "Common.props"

<Project ...>
  <ItemGroup> 
    <Reference Include="Assembly1"> 
      <HintPath>..\$(Configuration)\Path\Assembly1</HintPath> 
    </Reference> 
    <Reference Include="Assembly2"> 
      <HintPath>..\$(Configuration)\Path\Assembly2</HintPath> 
    </Reference> 
  </ItemGroup> 
</Project>

Вы можете поместить это в отдельный файл Common.props, как показано, и использовать импорт.элемент для «включения» его во все файлы вашего проекта, поэтому существует одна точка обслуживания, например:

<Project ...>
  <PropertyGroup>
    <Configuration Condition="'$(Configuration)' == ''>Debug</Configuration>
    ...other properties
  </PropertyGroup>
  <Import Project="Common.props" />
  ...rest of your C# project file
</Project>

Что важно в размещении импорта, показанном выше, так это то, что он происходит послеопределение значения по умолчанию для $ (Configuration), в случае, если ни одно не указано, что делает правильное значение доступным при импорте.Конечно, вы можете переместить это объявление значения по умолчанию, а также многое другое, в файл Common.props.Если вы делаете это последовательно, ваши файлы проекта обычно становятся чуть более 4-х свойств (Project Guid, Пространство имен, Имя сборки, Тип проекта), импорта, списка файлов для компиляции и любых необычных ссылок на сборки или ссылок на проекты.Мои проекты обычно никогда не содержат никаких условных свойств, поскольку они почти всегда могут быть преобразованы в общий импорт.

Нет хорошего пользовательского интерфейса для этого, пользовательский интерфейс VS IDE очень ограничен, и яникогда не используйте его для изменения каких-либо свойств проекта, а вместо этого полагайтесь на пользовательские инструменты, как правило, настраиваемые задачи MSBuild для проверки файлов проекта на предмет их согласованности, и сценарии PowerShell для их изменения для общих изменений.

Excerptedиз книги MSBuild Trickery хитрости # 14 - 18

РЕДАКТИРОВАТЬ: добавлено описание импорта

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...