Bedingtes Ändern der Zielframeworkversion

Ich versuche, eine # ifdef'd-Codebasis für zwei verschiedene Ziel-Frameworks zu kompilieren, nämlich 3.5 und 4.0.

Ich habe versucht, die .proj-Dateien in der Lösung ohne Erfolg zu ändern.

Es scheint, dass MSBuild / VS2012 die Änderung der Lösungskonfiguration nicht über die Benutzeroberfläche aufnimmt.

Dies ist ein Fragment einer der .proj-Dateien:

  <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>

Wenn ich von "Release" zu "Debug 40" wechsle, ändert sich das Zielframework nicht in den Projekteigenschaften (wodurch die Kompilierung aufgrund anderer Assemblys, auf die unter bestimmten Bedingungen verwiesen wird, unterbrochen wird).

Ich habe auch Probleme beim bedingten Verweisen auf verschiedene Assemblys, als ob die Lösungskonfiguration erneut nicht von VS / MSBuild übernommen würde (einige werden nicht einmal in den Referenzen angezeigt).

Bearbeiten: Ich schließe Microsoft.CSharp aus dem Build v3.5 mit der folgenden Zeile aus:

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

Bisher scheint es nur die TargetFrameworkVersion-Eigenschaft zu sein, die ignoriert wird.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage