Versión de marco de destino cambiante de forma

Estoy intentando compilar una base de código # ifdef'd en dos marcos de destino diferentes, es decir, 3.5 y 4.0.

Intenté modificar los archivos .proj en la solución sin éxito.

Parece que MSBuild / VS2012 no está captando el cambio de configuración de la solución a través de la interfaz de usuario.

Este es un fragmento de uno de los archivos .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>

Cuando cambio a "Depurar 40" desde "Liberar", el marco de destino no cambia en las propiedades del proyecto (por lo tanto, se rompe la compilación debido a otros conjuntos referenciados condicionalmente).

También estoy teniendo problemas para hacer referencia a diferentes conjuntos, como si, de nuevo, VS / MSBuild no haya recogido la configuración de la solución (algunos ni siquiera aparecen en las referencias).

Edición: estoy excluyendo Microsoft.CSharp de la compilación v3.5 con la siguiente línea:

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

Hasta ahora parece que solo se ignora la propiedad TargetFrameworkVersion.

Respuestas a la pregunta(1)

Su respuesta a la pregunta