Aracılığıyla paylaş


MSBuild özellikleri

Özellikler, derlemeleri yapılandırmak için kullanılabilecek ad-değer çiftleridir. Özellikler, değerleri görevlere geçirmek, koşulları değerlendirmek ve proje dosyası boyunca başvurulacak değerleri depolamak için kullanışlıdır.

Proje dosyasında özellikleri tanımlama ve bunlara başvurma

Özellikler, özelliğin adını bir PropertyGroup öğesinin alt öğesi olarak içeren bir öğe oluşturularak bildirilir. Örneğin, aşağıdaki XML değeri BuildDirolan adlı Build bir özellik oluşturur.

<PropertyGroup>
    <BuildDir>Build</BuildDir>
</PropertyGroup>

Geçerli özellik adları büyük veya küçük harfli ASCII harfi veya alt çizgiyle (_ ) başlar; geçerli sonraki karakterler alfasayısal karakterler (ASCII harf veya basamaklar), alt çizgi ve kısa çizgi (-) içerir.

Proje dosyasının tamamında özelliklere söz dizimi $(<PropertyName>)kullanılarak başvurulur. Örneğin, önceki örnekteki özelliğine kullanılarak $(BuildDir)başvurulur.

Özellik değerleri, özelliği yeniden tanımlanarak değiştirilebilir. Özelliğine BuildDir şu XML kullanılarak yeni bir değer verilebilir:

<PropertyGroup>
    <BuildDir>Alternate</BuildDir>
</PropertyGroup>

Özellikler, proje dosyasında göründükleri sırayla değerlendirilir. için BuildDir yeni değerin, eski değer atandıktan sonra bildirilmesi gerekir.

Ayrılmış özellikler

MSBuild, proje dosyası ve MSBuild ikili dosyaları hakkındaki bilgileri depolamak için bazı özellik adlarını ayırır. Bu özelliklere, diğer tüm özelliklerde olduğu gibi $ gösterimi kullanılarak başvurulur. Örneğin, $(MSBuildProjectFile), dosya adı uzantısı dahil olmak üzere proje dosyasının tam dosya adını döndürür.

Daha fazla bilgi için bkz. Nasıl yapılır: Proje dosyasının adına veya konumuna başvurma ve MSBuild ayrılmış ve iyi bilinen özellikleri.

MSBuild iç özellikleri

Alt çizgi (_) ile başlayan standart içeri aktarma dosyalarında tanımlanan özellikler MSBuild'e özeldir ve kullanıcı kodunda okunmamalı, sıfırlanmamalı veya geçersiz kılınmamalıdır.

Ortam özellikleri

Ayrılmış özelliklere başvurdığınız gibi proje dosyalarındaki ortam değişkenlerine de başvurabilirsiniz. Örneğin, proje dosyanızda ortam değişkenini PATH kullanmak için $(Path) kullanın. Proje, ortam özelliğiyle aynı ada sahip bir özellik tanımı içeriyorsa, projedeki özellik ortam değişkeninin değerini geçersiz kılar.

Her MSBuild projesinin yalıtılmış bir ortam bloğu vardır: yalnızca kendi bloğuna okuma ve yazma işlemleri görür. MSBuild, proje dosyası değerlendirilmeden veya oluşturulmadan önce yalnızca özellik koleksiyonunu başlatırken ortam değişkenlerini okur. Bundan sonra ortam özellikleri statiktir, yani oluşturulan her araç aynı ad ve değerlerle başlar.

Oluşturulan bir aracın içinden ortam değişkenlerinin geçerli değerini almak için System.Environment.GetEnvironmentVariable Özellik işlevlerini kullanın. Ancak tercih edilen yöntem, görev parametresini EnvironmentVariableskullanmaktır. Bu dize dizisinde ayarlanan ortam özellikleri, sistem ortam değişkenlerini etkilemeden oluşturulan ara aracına geçirilebilir.

Tavsiye

İlk özelliklere dönüşmek için tüm ortam değişkenleri içinde okunmuyor. Adı "386" gibi geçerli bir MSBuild özellik adı olmayan ortam değişkenleri yoksayılır.

Daha fazla bilgi için bkz. Nasıl yapılır: Derlemede ortam değişkenlerini kullanma.

Kayıt defteri özellikleri

Aşağıdaki söz dizimini kullanarak sistem kayıt defteri değerlerini okuyabilirsiniz; burada Hive kayıt defteri kovanı (örneğin, HKEY_LOCAL_MACHINE), MyKey anahtar adıdır, MySubKey alt anahtar adıdır ve Value alt anahtarın değeridir.

$(registry:Hive\MyKey\MySubKey@Value)

Varsayılan alt anahtar değerini almak için değerini atlar Value.

$(registry:Hive\MyKey\MySubKey)

Bu kayıt defteri değeri bir derleme özelliğini başlatmak için kullanılabilir. Örneğin, Visual Studio web tarayıcısı giriş sayfasını temsil eden bir derleme özelliği oluşturmak için şu kodu kullanın:

<PropertyGroup>
  <VisualStudioWebBrowserHomePage>
    $(registry:HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\14.0\WebBrowser@HomePage)
  </VisualStudioWebBrowserHomePage>
<PropertyGroup>

Uyarı

MSBuild ' in .NET SDK sürümünde (dotnet build ), kayıt defteri özellikleri desteklenmez.

Yürütme sırasında özellik oluşturma

Öğelerin dışına Target konumlandırılan özelliklere, derlemenin değerlendirme aşamasında değerler atanır. Sonraki yürütme aşamasında, özellikler aşağıdaki gibi oluşturulabilir veya değiştirilebilir:

  • Bir özellik herhangi bir görev tarafından yayılabilir. Özellik yaymak için Task öğesinin özniteliği olan bir alt PropertyName öğesi olmalıdır.

  • Bir özellik CreateProperty görevi tarafından yayılabilir. Bu kullanım kullanım dışıdır.

  • Target öğeleri, özellik bildirimleri içerebilecek öğeler içerebilir PropertyGroup .

Genel özellikler

MSBuild, -property (veya -p) anahtarını kullanarak komut satırında özellikleri ayarlamanıza olanak tanır. Bu genel özellik değerleri, proje dosyasında ayarlanan özellik değerlerini geçersiz kılar. Bu ortam özelliklerini içerir, ancak değiştirilemeyen ayrılmış özellikleri içermez.

Aşağıdaki örnek genel Configuration özelliğini olarak DEBUGayarlar.

msbuild.exe MyProj.proj -p:Configuration=DEBUG

Genel özellikler, MSBuild görevinin Properties özniteliği kullanılarak çok projeli bir derlemedeki alt projeler için de ayarlanabilir veya değiştirilebilir. Genel özellikler de, iletilmeyecek özellikler listesini belirtmek için MSBuild görevinin özniteliği kullanılmadığı sürece RemoveProperties alt projelere iletilir. Daha fazla bilgi için bkz. MSBuild görevi.

Yerel özellikler

Bir projede yerel özellikler sıfırlanabilir. Genel özellikler yapamaz. Seçeneğiyle -p komut satırından yerel bir özellik ayarlandığında, proje dosyasındaki ayar komut satırından önceliklidir.

Bir proje etiketinde özniteliğini TreatAsLocalProperty kullanarak yerel bir özellik belirtirsiniz.

Aşağıdaki kod, iki özelliğin yerel olduğunu belirtir:

<Project Sdk="Microsoft.Net.Sdk" TreatAsLocalProperty="Prop1;Prop2">

Yerel özellikler, çok projeli bir derlemede alt projelere iletılmaz. Komut satırında seçeneğiyle -p bir değer sağlarsanız, alt projelere üst projede değiştirilen yerel değer yerine genel özelliğin değeri verilir, ancak alt proje (veya içeri aktarmalarından herhangi biri) bunu kendi TreatAsLocalPropertyile de değiştirebilir.

Yerel özelliklere sahip örnek

Aşağıdaki kod örneği, etkisini TreatAsLocalPropertygösterir:

<!-- test1.proj -->
<Project TreatAsLocalProperty="TreatedAsLocalProp">
    <PropertyGroup>
        <TreatedAsLocalProp>LocalOverrideValue</TreatedAsLocalProp>
    </PropertyGroup>

    <Target Name="Go">
        <MSBuild Projects="$(MSBuildThisFileDirectory)\test2.proj" Targets="Go2" Properties="Inner=true" />
    </Target>

    <Target Name="Go2" BeforeTargets="Go">
        <Warning Text="TreatedAsLocalProp($(MSBuildThisFileName)): $(TreatedAsLocalProp)" />
    </Target>
</Project>
<!-- test2.proj -->
<Project TreatAsLocalProperty="TreatedAsLocalProp">
    <Target Name="Go2">
        <Warning Text="TreatedAsLocalProp($(MSBuildThisFileName)): $(TreatedAsLocalProp)" />
    </Target>
</Project>

test1.proj komut satırı oluşturduğunuzu ve genel değeri TreatedAsLocalPropertyverdiğinizi GlobalOverrideValue varsayalım:

dotnet msbuild .\test1.proj -p:TreatedAsLocalProp=GlobalOverrideValue

Çıktı aşağıdaki şekilde olacaktır:

test1.proj(11,9): warning : TreatedAsLocalProp(test): LocalOverrideValue
test2.proj(3,9): warning : TreatedAsLocalProp(test2): GlobalOverrideValue

Alt proje genel değeri devralır, ancak üst proje yerel olarak ayarlanmış özelliğini kullanır.

Yerel özellikler ve içeri aktarmalar

TreatAsLocalProperty İçeri aktarılan projede öznitelik kullanıldığında, özelliğin hangi değeri aldığı dikkate alınırken sıralama önemlidir.

Aşağıdaki kod örneği, içeri aktarılan bir proje üzerindeki etkisini TreatAsLocalProperty gösterir:

<!-- importer.proj -->
<Project>
    <PropertyGroup>
        <TreatedAsLocalProp>FirstOverrideValue</TreatedAsLocalProp>
    </PropertyGroup>

    <Import Project="import.props" />

    <PropertyGroup>
        <TreatedAsLocalProp Condition=" '$(TrySecondOverride)' == 'true' ">SecondOverrideValue</TreatedAsLocalProp>
    </PropertyGroup>

    <Target Name="Go">
        <Warning Text="TreatedAsLocalProp($(MSBuildThisFileName)): $(TreatedAsLocalProp)" />
    </Target>
</Project>
<!-- import.props -->
<Project TreatAsLocalProperty="TreatedAsLocalProp">
    <PropertyGroup>
        <TreatedAsLocalProp>ImportOverrideValue</TreatedAsLocalProp>
    </PropertyGroup>

    <!-- Here, TreatedAsLocalProp has the value "ImportOverrideValue"-->
</Project>

için importer.proj aşağıdaki gibi bir genel değer oluşturup TreatedAsLocalProp ayarladığınızı varsayalım:

dotnet msbuild .\importer.proj -p:TreatedAsLocalProp=GlobalOverrideValue

Çıktı şudur:

importer.proj(9,9): warning : TreatedAsLocalProp(importer.proj): ImportOverrideValue

Şimdi özelliğiyle TrySecondOverridetrueoluşturduğunuzu varsayalım:

dotnet msbuild .\importer.proj -p:TreatedAsLocalProp=GlobalOverrideValue -p:TrySecondOverride=true

Çıktı şudur:

importer.proj(13,9): warning : TreatedAsLocalProp(importer.proj): SecondOverrideValue

Örnekte özelliğin yalnızca içeri aktarılan dosya içinde değil özniteliğin kullanıldığı içeri aktarılan projeden TreatAsLocalProperty yerel olarak kabul edildiği gösterilmektedir. özelliğinin değeri genel geçersiz kılma değerinden etkilenir, ancak yalnızca kullanılan içeri aktarılan projedenTreatAsLocalProperty önce.

Daha fazla bilgi için bkz . Project öğesi (MSBuild) ve Nasıl yapılır: Farklı seçeneklerle aynı kaynak dosyaları oluşturma.

Özellik fonksiyonları

.NET Framework sürüm 4'te başlayarak, MSBuild betiklerinizi değerlendirmek için özellik işlevlerini kullanabilirsiniz. MSBuild görevlerini kullanmadan sistem saatini okuyabilir, dizeleri karşılaştırabilir, normal ifadeleri eşleştirebilir ve derleme betiğinizde başka birçok eylem gerçekleştirebilirsiniz.

Herhangi bir özellik değeri üzerinde çalışmak için dize (örnek) yöntemlerini kullanabilir ve birçok sistem sınıfının statik yöntemlerini çağırabilirsiniz. Örneğin, derleme özelliğini aşağıdaki gibi bugünün tarihine ayarlayabilirsiniz.

<Today>$([System.DateTime]::Now.ToString("yyyy.MM.dd"))</Today>

Daha fazla bilgi ve özellik işlevlerinin listesi için bkz. Özellik işlevleri.

XML'i özelliklerde depolama

Özellikler, değerlerin görevlere geçirilmesine veya günlük bilgilerinin görüntülenmesine yardımcı olabilecek rastgele XML içerebilir. Aşağıdaki örnek, XML ve diğer özellik başvurularını içeren bir değere sahip olan özelliğini gösterir ConfigTemplate . MSBuild, ilgili özellik değerlerini kullanarak özellik başvurularının yerini alır. Özellik değerleri, göründükleri sırayla atanır. Bu nedenle, bu örnekte , $(MySupportedVersion)$(MyRequiredVersion)ve $(MySafeMode) zaten tanımlanmış olmalıdır.

<PropertyGroup>
    <ConfigTemplate>
        <Configuration>
            <Startup>
                <SupportedRuntime
                    ImageVersion="$(MySupportedVersion)"
                    Version="$(MySupportedVersion)"/>
                <RequiredRuntime
                    ImageVersion="$(MyRequiredVersion)"
                    Version="$(MyRequiredVersion)"
                    SafeMode="$(MySafeMode)"/>
            </Startup>
        </Configuration>
    </ConfigTemplate>
</PropertyGroup>