Birden çok proje dosyasında aynı hedefi kullanma

Birkaç MSBuild proje dosyası yazdıysanız, aynı görevleri ve hedefleri farklı proje dosyalarında kullanmanız gerektiğini fark etmiş olabilirsiniz. Bu görevlerin veya hedeflerin tam açıklamasını her proje dosyasına eklemek yerine, hedefi ayrı bir proje dosyasına kaydedebilir ve ardından bu projeyi hedefi kullanması gereken başka bir projeye aktarabilirsiniz.

İçeri Aktar öğesini kullanma

Import öğesi, bir proje dosyasını başka bir proje dosyasına eklemek için kullanılır. İçeri aktarılmakta olan proje dosyasının geçerli bir MSBuild proje dosyası olması ve iyi biçimlendirilmiş XML içermesi gerekir. özniteliği, Project içeri aktarılan proje dosyasının yolunu belirtir. öğesi hakkında Import daha fazla bilgi için bkz . İçeri aktarma öğesi (MSBuild).

Projeyi içeri aktarmak için

  1. İçeri aktarılan proje dosyasında, içeri aktarılan projedeki özellikler ve öğeler için parametre olarak kullanılan tüm özellikleri ve öğeleri tanımlayın.

  2. Import öğesini kullanarak projeyi içeri aktarın. Örneğin:

    <Import Project="MyCommon.targets"/>

  3. öğesinin ardından Import , içeri aktarılan projedeki özelliklerin ve öğelerin varsayılan tanımlarını geçersiz kılması gereken tüm özellikleri ve öğeleri tanımlayın.

Değerlendirme sırası

MSBuild bir Import öğeye ulaştığında, içeri aktarılan proje, öğesinin konumundaki içeri aktarma projesine Import etkili bir şekilde eklenir. Bu nedenle, öğesinin Import konumu özelliklerin ve öğelerin değerlerini etkileyebilir. İçeri aktarılan proje tarafından ayarlanan özellikleri ve öğeleri ve içeri aktarılan projenin kullandığı özellikleri ve öğeleri anlamak önemlidir.

Proje oluşturulduğunda, önce tüm özellikler değerlendirilir, ardından öğeler eklenir. Örneğin, aşağıdaki XML içeri aktarılan MyCommon.targets proje dosyasını tanımlar:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <Name>MyCommon</Name>
    </PropertyGroup>

    <Target Name="Go">
        <Message Text="Name=$(Name)"/>
    </Target>
</Project>

Aşağıdaki XML, MyCommon.targets dosyasını içeri aktaran MyApp.proj dosyasını tanımlar:

<Project
    DefaultTargets="Go"
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <Name>MyApp</Name>
    </PropertyGroup>
    <Import Project="MyCommon.targets"/>
</Project>

Proje oluşturulduğunda aşağıdaki ileti görüntülenir:

Name="MyCommon"

Özellik Name MyApp.proj içinde tanımlandıktan sonra proje içeri aktarıldığından, MyCommon.targets içindeki tanımı Name MyApp.proj içindeki tanımı geçersiz kılar. Proje Name özelliği tanımlanmadan önce içeri aktarılırsa, derleme aşağıdaki iletiyi görüntüler:

Name="MyApp"

Projeleri içeri aktarırken aşağıdaki yaklaşımı kullanın

  1. Proje dosyasında, içeri aktarılan projedeki özellikler ve öğeler için parametre olarak kullanılan tüm özellikleri ve öğeleri tanımlayın.

  2. Projeyi içeri aktarın.

  3. proje dosyasında, içeri aktarılan projedeki özelliklerin ve öğelerin varsayılan tanımlarını geçersiz kılması gereken tüm özellikleri ve öğeleri tanımlayın.

Örnek 1

Aşağıdaki kod örneği, ikinci kod örneğinin içeri aktardığını MyCommon.targets dosyasını gösterir. .targets dosyası, derlemeyi yapılandırmak için içeri aktarılan projedeki özellikleri değerlendirir.

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <Flavor Condition="'$(Flavor)'==''">DEBUG</Flavor>
        <Optimize Condition="'$(Flavor)'=='RETAIL'">yes</Optimize>
        <appname>$(MSBuildProjectName)</appname>
    <PropertyGroup>
    <Target Name="Build">
        <Csc Sources="hello.cs"
            Optimize="$(Optimize)"
            OutputAssembly="$(appname).exe"/>
    </Target>
</Project>

Örnek 2

Aşağıdaki kod örneği MyCommon.targets dosyasını içeri aktarır.

<Project DefaultTargets="Build"
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <Flavor>RETAIL</Flavor>
    </PropertyGroup>
    <Import Project="MyCommon.targets"/>
</Project>