Bunu gerçekleştirmenin en iyi yollarından biri, projenizde farklı yapı yapılandırmaları oluşturmaktır:
<PropertyGroup Condition=" '$(Framework)' == 'NET20' ">
<DefineConstants>NET20</DefineConstants>
<OutputPath>bin\$(Configuration)\$(Framework)</OutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Framework)' == 'NET35' ">
<DefineConstants>NET35</DefineConstants>
<OutputPath>bin\$(Configuration)\$(Framework)</OutputPath>
</PropertyGroup>
Ve varsayılan yapılandırmalarınızdan birinde:
<Framework Condition=" '$(Framework)' == '' ">NET35</Framework>
Başka bir yerde tanımlanmamışsa varsayılanı ayarlar. Yukarıdaki durumda, OutputPath her sürümü her oluşturduğunuzda size ayrı bir derleme verecektir.
Ardından, farklı sürümlerinizi derlemek için bir AfterBuild hedefi oluşturun:
<Target Name="AfterBuild">
<MSBuild Condition=" '$(Framework)' != 'NET20'"
Projects="$(MSBuildProjectFile)"
Properties="Framework=NET20"
RunEachTargetSeparately="true" />
</Target>
Bu örnek, ilk derlemeden sonra Framework değişkeninin NET20 olarak ayarlandığı tüm projeyi yeniden derleyecektir (her ikisini de derleyerek ve ilk yapının yukarıdan varsayılan NET35 olduğunu varsayarsak). Her derlemenin koşullu tanımlama değerleri doğru şekilde ayarlanmış olacaktır.
Bu şekilde, dosyaları #ifdef yapmak zorunda kalmadan proje dosyasındaki belirli dosyaları hariç tutabilirsiniz:
<Compile Include="SomeNet20SpecificClass.cs" Condition=" '$(Framework)' == 'NET20' " />
hatta referanslar
<Reference Include="Some.Assembly" Condition="" '$(Framework)' == 'NET20' " >
<HintPath>..\Lib\$(Framework)\Some.Assembly.dll</HintPath>
</Reference>