Mudando condicionalmente a versão do framework de destino

Eu estou tentando compilar uma base de código # ifdef'd para duas estruturas de destino diferentes, ou seja, 3.5 e 4.0.

Eu tentei modificar os arquivos .proj na solução sem sucesso.

Parece MSBuild / VS2012 não está pegando a mudança de configuração da solução via interface do usuário.

Este é um fragmento de um dos arquivos .proj:

  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>..\Binaries\</OutputPath>
    <DefineConstants>TRACE;NET35</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug 40|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <OutputPath>..\Binaries\</OutputPath>
    <DefineConstants>TRACE;DEBUG;NET40</DefineConstants>
    <DebugType>full</DebugType>
    <PlatformTarget>AnyCPU</PlatformTarget>
    <ErrorReport>prompt</ErrorReport>
    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
  </PropertyGroup>

Quando eu alterno para "Debug 40" de "Release", a estrutura de destino não é alterada nas propriedades do projeto (interrompendo assim a compilação devido a outros assemblies referenciados condicionalmente).

Eu também estou tendo problemas referenciando condicionalmente diferentes assemblies, como se, novamente, a configuração da solução não fosse escolhida pelo VS / MSBuild (alguns nem aparecem nas referências).

Edit: estou excluindo Microsoft.CSharp da compilação v3.5 com a seguinte linha:

<Reference Include="Microsoft.CSharp" Condition=" '$(Configuration)' == 'Debug 40'" />

Até agora, parece que é apenas a propriedade TargetFrameworkVersion que é ignorada.

questionAnswers(1)

yourAnswerToTheQuestion