Условно изменяемая целевая версия фреймворка
Я пытаюсь скомпилировать кодовую базу # ifdef для двух разных целевых сред, а именно 3.5 и 4.0.
Я попытался изменить файлы .proj в решении, но безрезультатно.
Похоже, MSBuild / VS2012 не принимает изменения конфигурации решения через пользовательский интерфейс.
Это фрагмент одного из файлов .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>
Когда я переключаюсь на «Debug 40» из «Release», целевая платформа не изменяется в свойствах проекта (что приводит к нарушению компиляции из-за других условно-связанных сборок).
У меня также возникают проблемы с условной ссылкой на разные сборки, как если бы, опять же, конфигурация решения не была обнаружена VS / MSBuild (некоторые даже не отображаются в ссылках).
Изменить: я исключаю Microsoft.CSharp из сборки v3.5 со следующей строкой:
<Reference Include="Microsoft.CSharp" Condition=" '$(Configuration)' == 'Debug 40'" />
Пока кажется, что это просто свойство TargetFrameworkVersion, которое игнорируется.