#ifdef されたコードベースを 2 つの異なるターゲット フレームワーク、つまり 3.5 と 4.0 にコンパイルしようとしています。
ソリューション内の .proj ファイルを変更しようとしましたが、役に立ちませんでした。
MSBuild / VS2012 が UI を介してソリューション構成の変更を認識していないようです。
これは、.proj ファイルの 1 つのフラグメントです。
<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>
「リリース」から「デバッグ 40」に切り替えると、プロジェクトのプロパティでターゲット フレームワークが変更されません (したがって、他の条件付きで参照されるアセンブリのためにコンパイルが中断されます)。
また、別のアセンブリを条件付きで参照する際にも問題が発生しています。これも、VS/MSBuild によってソリューション構成が取得されていないかのようです (参照に表示されないものもあります)。
編集: 次の行で v3.5 ビルドから Microsoft.CSharp を除外しています。
<Reference Include="Microsoft.CSharp" Condition=" '$(Configuration)' == 'Debug 40'" />
これまでのところ、無視されているのは TargetFrameworkVersion プロパティだけのようです。