Как писал Джон Скит, не существует очевидного способа определения целевой структуры на уровне решения.Однако это можно сделать, добавив к решению конкретные конфигурации , а затем отредактировав файлы *.csproj
вручную, указав цели для каждой конфигурации, а не глобально для всего проекта.
Вот пошаговое руководство:
- Выбрать Сборка - Диспетчер конфигурации .
- В Активное решениеконфигурации , в раскрывающемся списке выберите и введите осмысленное имя (например,
Debug v3.5
) в зависимости от существующих настроек. - Для каждого файла проекта откройте его вредактор (вы можете сделать это в Visual Studio, но вы должны сначала щелкнуть по нему правой кнопкой мыши в обозревателе решений и выбрать Выгрузить проект , затем Редактировать xyz.csproj ).
- Найдите элемент
<PropertyGroup>
, который соответствует конфигурации, которую вы только что создали (например, Debug v3.5|AnyCPU
). - Добавьте в XML, например, после закрывающего элемента
</PlatformTarget>
, <TargetFrameworkVersion>
и <TargetFrameworkProfile>
вам нужно. - Save файл.
- В обозревателе решений введите команду Обновить проект , чтобы снова сделать проект доступным.
Вот пример:
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug v3.5|AnyCPU'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\Debug v3.5\</OutputPath>
<DefineConstants>DEBUG;TRACE;DOTNET35</DefineConstants>
...
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
...
</PropertyGroup>
Обратите внимание, что я также определяю символ DOTNET35
, который позволяет мне писать зависящие от каркаса операторы #if
в исходном коде.У меня было, например, несколько кусков кода, которые опирались на System.Tuple
, и, добавив минималистичную версию класса, я мог бы перенести свое приложение .NET 4.0 обратно в .NET 3.5.
Вотмой фрагмент:
#if DOTNET35
namespace System
{
public class Tuple<T1, T2>
{
public Tuple(T1 item1, T2 item2)
{
this.item1 = item1;
this.item2 = item2;
}
public T1 Item1
{
get
{
return this.item1;
}
}
public T2 Item2
{
get
{
return this.item2;
}
}
private readonly T1 item1;
private readonly T2 item2;
}
}
#endif