Изменение csproj OutputType в зависимости от конфигурации проекта - PullRequest
6 голосов
/ 29 июля 2011

Мне нужно построить проект C # в виде WinExe или библиотеки в зависимости от конфигурации проекта.

Я испробовал оба эти метода без удачи:

1) В общей группе недвижимости:

<OutputType Condition=" '$(Configuration)' == 'Release' ">WinExe</OutputType> <OutputType Condition=" '$(Configuration)' == 'Debug' ">Library</OutputType>

2) В условной группе объектов:

<PropertyGroup Condition=" '$(Configuration)' == 'Release' "> <OutputType>WinExe</OutputType> </PropertyGroup>

<PropertyGroup Condition=" '$(Configuration)' == 'Debug' "> <OutputType>Library</OutputType> </PropertyGroup>

Ни один из этих методов не работает, а OutputType всегда WinExe. Странно то, что если я заменю все экземпляры WinExe на Library, то это всегда Library. Это заставляет меня думать, что он читает их успешно, но либо в странном порядке, либо WinExe имеет приоритет над библиотекой.

Есть идеи?

1 Ответ

8 голосов
/ 29 июля 2011

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

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
  <OutputType>Library</OutputType>
  <!-- Other properties go here -->
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
  <OutputType>Exe</OutputType>
  <!-- Other properties go here -->
</PropertyGroup>

Добавьте ваши OutputType элементы к этим двум условным PropertyGroup разделам и убедитесь, что вы удалили все остальные OutputType элементы - я только что проверил это, и он делает именно то, что вы просите.

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

...