Разные действия сборки для сборок debug и release в Visual Studio

#c# #visual-studio-2010

#c# #visual-studio-2010

Вопрос:

У меня есть это решение C # Visual Studio, которое реализует архитектуру плагинов. При создании сборки отладки я хочу, чтобы в основное приложение была скомпилирована пара плагинов. При создании сборки release я хочу, чтобы эти CS-файлы были оставлены в покое.

Есть ли способ указать разные действия сборки для файлов плагинов для сборок debug и release? Я бы хотел, чтобы для него было установлено значение «Compile» в сборке debug и значение «None» в сборке release.

Ответ №1:

Для этого вам нужно вручную изменить .csproj и добавить Condition атрибут Compile XML в элемент XML, соответствующий файлу, который вы хотите использовать только в отладочных сборках. Вот так:

 <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
      ...
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
      ...
  </PropertyGroup>
  <ItemGroup>
    <!-- Add the Condition attribute here, on each of your debug only files
    Pick up one of the configuration definition configuration above -->
    <Compile Include="DebugOnlyClass1.cs" Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "/>
    <!-- normal compilation -->
    <Compile Include="Class1.cs" />
    <Compile Include="PropertiesAssemblyInfo.cs" />
  </ItemGroup>
     ...
</Project>
  

Ответ №2:

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

Для проектов вы можете определить, следует ли выполнять сборку в конфигурации или нет: в Visual Studio откройте диспетчер конфигурации (меню Build). В верхнем левом выпадающем списке выберите конфигурацию Release или Debug и установите флажки build в списке ad libitum.

Редактировать: в противном случае вам придется редактировать .csproj файл вручную и добавлять атрибут условия к элементу, который вы хотите исключить:

 <Compile Condition="'$(Configuration)' == 'Debug'" Include="Program.cs" />
  

Комментарии:

1. @Simon: Нет. Даже не вдохновлен. Хотя я должен признать, что формулировка очень похожа.

2. @SimonMourier да, но через 30 секунд после вашего ответа — я считаю, что это было совпадением.