Warunkowo zmieniająca się docelowa wersja ramowa

Próbuję skompilować kod bazowy # ifdef'd do dwóch różnych frameworków docelowych, mianowicie 3.5 i 4.0.

Próbowałem zmodyfikować pliki .proj w rozwiązaniu bezskutecznie.

Wygląda na to, że MSBuild / VS2012 nie odbiera zmiany konfiguracji rozwiązania za pośrednictwem interfejsu użytkownika.

To jest fragment jednego z plików .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>

Kiedy przełączam się na „Debugowanie 40” z „Zwolnij”, struktura docelowa nie zmienia się we właściwościach projektu (przerywając kompilację z powodu innych złożeń warunkowo powiązanych).

Mam również problemy warunkowo odwołujące się do różnych zespołów, tak jakby ponownie konfiguracja rozwiązania nie była pobierana przez VS / MSBuild (niektóre nawet nie pojawiają się w odwołaniach).

Edytuj: Wykluczam Microsoft.CSharp z kompilacji v3.5 z następującą linią:

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

Jak na razie wydaje się, że jest to tylko właściwość TargetFrameworkVersion, która jest ignorowana.

questionAnswers(1)

yourAnswerToTheQuestion