Aracılığıyla paylaş


Aynı kaynak dosyalarını farklı seçeneklerle derleme

Projeleri oluştururken, aynı bileşenleri sık sık farklı derleme seçenekleriyle derlersiniz. Örneğin, sembol bilgileri içeren bir hata ayıklama derlemesi veya sembol bilgisi olmayan ancak iyileştirmeler etkinleştirilmiş bir sürüm derlemesi oluşturabilirsiniz. Alternatif olarak, x86 veya x64 gibi belirli bir platformda çalışacak bir proje oluşturabilirsiniz. Tüm bu durumlarda derleme seçeneklerinin çoğu aynı kalır; derleme yapılandırmasını denetlemek için yalnızca birkaç seçenek değiştirilir. MSBuild ile, farklı derleme yapılandırmalarını oluşturmak için özellikleri ve koşulları kullanırsınız.

Derleme ayarlarını denetlemek için özellikleri kullanma

Property öğesi, geçici bir dizinin konumu gibi bir proje dosyasında birkaç kez başvurulan veya Hata Ayıklama derlemesi ve Yayın derlemesi gibi çeşitli yapılandırmalarda kullanılan özelliklerin değerlerini ayarlamak için bir değişken tanımlar. Özellikler hakkında daha fazla bilgi için bkz . MSBuild özellikleri.

Proje dosyasını değiştirmek zorunda kalmadan derlemenizin yapılandırmasını değiştirmek için özellikleri kullanabilirsiniz. Condition öğesinin Property ve öğesinin PropertyGroup özniteliği, özelliklerin değerini değiştirmenize olanak tanır. MSBuild koşulları hakkında daha fazla bilgi için bkz . Koşullar.

Başka bir özelliğe bağlı bir özellik grubu ayarlamak için

  • Condition Aşağıdakine benzer bir PropertyGroup öğede öznitelik kullanın:

    <PropertyGroup Condition="'$(Flavor)'=='DEBUG'">
        <DebugType>full</DebugType>
        <Optimize>no</Optimize>
    </PropertyGroup>
    

Başka bir özelliğe bağımlı bir özellik tanımlamak için

  • Condition Aşağıdakine benzer bir Property öğede öznitelik kullanın:

    <DebugType Condition="'$(Flavor)'=='DEBUG'">full</DebugType>
    

Komut satırında özellikleri belirtme

Proje dosyanız birden çok yapılandırmayı kabul etmek üzere yazıldıktan sonra, projenizi her derlediğinizde bu yapılandırmaları değiştirme yeteneğine sahip olmanız gerekir. MSBuild, -property veya -p anahtarını kullanarak komut satırında özelliklerin belirtilmesine izin vererek bu özelliği sağlar.

Komut satırında bir proje özelliği ayarlamak için

  • -property anahtarını özellik ve özellik değeriyle birlikte kullanın. Örneğin:

    msbuild file.proj -property:Flavor=Debug
    

    veya

    Msbuild file.proj -p:Flavor=Debug
    

Komut satırında birden fazla proje özelliği belirtmek için

  • Özellik ve özellik değerleriyle -property veya -p anahtarını birden çok kez kullanın ya da tek bir -property veya -p anahtarı kullanın ve birden çok özelliği noktalı virgülle (;)) ayırın. Örneğin:

    msbuild file.proj -p:Flavor=Debug;Platform=x86
    

    veya

    msbuild file.proj -p:Flavor=Debug -p:Platform=x86
    

    Ortam değişkenleri de özellik olarak değerlendirilir ve MSBuild tarafından otomatik olarak eklenir. Ortam değişkenlerini kullanma hakkında daha fazla bilgi için bkz . Nasıl yapılır: Derlemede ortam değişkenlerini kullanma.

    Komut satırında belirtilen özellik değeri, proje dosyasındaki aynı özellik için ayarlanan herhangi bir değerden önceliklidir ve proje dosyasındaki bu değer bir ortam değişkenindeki değerden önceliklidir.

    Bir proje etiketinde özniteliğini TreatAsLocalProperty kullanarak bu davranışı değiştirebilirsiniz. Bu öznitelikle birlikte listelenen özellik adları için, komut satırında belirtilen özellik değeri proje dosyasındaki değerden öncelikli değildir. Bu konunun devamında bir örnek bulabilirsiniz.

Örnek 1

Aşağıdaki kod örneği olan "Merhaba Dünya" projesi, hata ayıklama derlemesi ve Yayın derlemesi oluşturmak için kullanılabilecek iki yeni özellik grubu içerir.

Bu projenin hata ayıklama sürümünü oluşturmak için şunu yazın:

msbuild consolehwcs1.proj -p:flavor=debug

Bu projenin perakende sürümünü oluşturmak için şunu yazın:

msbuild consolehwcs1.proj -p:flavor=retail
<Project DefaultTargets = "Compile"
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <!-- Sets the default flavor if an environment variable called
    Flavor is not set or specified on the command line -->
    <PropertyGroup>
        <Flavor Condition="'$(Flavor)'==''">DEBUG</Flavor>
    </PropertyGroup>

    <!-- Define the DEBUG settings -->
    <PropertyGroup Condition="'$(Flavor)'=='DEBUG'">
        <DebugType>full</DebugType>
        <Optimize>no</Optimize>
    </PropertyGroup>

    <!-- Define the RETAIL settings -->
    <PropertyGroup Condition="'$(Flavor)'=='RETAIL'">
        <DebugType>pdbonly</DebugType>
        <Optimize>yes</Optimize>
    </PropertyGroup>

    <!-- Set the application name as a property -->
    <PropertyGroup>
        <appname>HelloWorldCS</appname>
    </PropertyGroup>

    <!-- Specify the inputs by type and file name -->
    <ItemGroup>
        <CSFile Include = "consolehwcs1.cs"/>
    </ItemGroup>

    <Target Name = "Compile">
        <!-- Run the Visual C# compilation using input files
        of type CSFile -->
        <CSC  Sources = "@(CSFile)"
            DebugType="$(DebugType)"
            Optimize="$(Optimize)"
            OutputAssembly="$(appname).exe" >

            <!-- Set the OutputAssembly attribute of the CSC
            task to the name of the executable file that is
            created -->
            <Output TaskParameter="OutputAssembly"
                ItemName = "EXEFile" />
        </CSC>
        <!-- Log the file name of the output file -->
        <Message Text="The output file is @(EXEFile)"/>
    </Target>
</Project>

Örnek 2

Aşağıdaki örnekte özniteliğinin nasıl kullanılacağı gösterilmektedir TreatAsLocalProperty . özelliği, Color proje dosyasında ve Green komut satırında değerine Blue sahiptir. ileTreatAsLocalProperty="Color", komut satırı özelliği (), proje dosyasında (GreenBlue) tanımlanan özelliği geçersiz kılmaz.

Projeyi oluşturmak için aşağıdaki komutu girin:

msbuild colortest.proj -t:go -property:Color=Green
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
ToolsVersion="4.0" TreatAsLocalProperty="Color">

    <PropertyGroup>
        <Color>Blue</Color>
    </PropertyGroup>

    <Target Name="go">
        <Message Text="Color: $(Color)" />
    </Target>
</Project>

<!--
  Output with TreatAsLocalProperty="Color" in project tag:
     Color: Blue

  Output without TreatAsLocalProperty="Color" in project tag:
     Color: Green
-->