Условно изменяемая целевая версия фреймворка

Я пытаюсь скомпилировать кодовую базу # 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, которое игнорируется.

Ответы на вопрос(1)

Ваш ответ на вопрос