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.