MSBuild özellikleri
Özellikler, yapıları yapılandırmak için kullanılabilen ad-değer çiftleridir. Özellikler, değerlerin görevlere geçirilmesinde, koşulların değerlendirilmesinde ve proje dosyası boyunca başvurulacak olan değerlerin depolanmasında yararlıdır.
Proje dosyasında özellikleri tanımlama ve bunlara başvurma
PropertyGroup öğesinin alt öğesi olarak özelliğin adına sahip bir öğe oluşturularak özellikler bildirilir. Örneğin aşağıdaki XML, bir BuildDir
değerine sahip olan Build
adında bir özellik oluşturur.
<PropertyGroup>
<BuildDir>Build</BuildDir>
</PropertyGroup>
Geçerli özellik adları büyük veya küçük harf veya alt çizgi (_
) ile başlar; geçerli sonraki karakterler alfasayısal karakterler (harfler 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.
Özelliği yeniden tanımlayarak özellik değerlerini değiştirebilirsiniz. Aşağıdaki XML kullanılarak BuildDir
özelliğine yeni bir değer verilebilir:
<PropertyGroup>
<BuildDir>Alternate</BuildDir>
</PropertyGroup>
Özellikler, proje dosyasında göründükleri sırayla değerlendirilir. BuildDir
öğesine ait 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ı saklar. Bu özellikler, diğer özelliklere benzer şekilde $ simgesi kullanılarak başvurulur. Örneğin $(MSBuildProjectFile), dosya adı uzantısı dahil olmak üzere proje dosyasının tüm 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 ve MSBuild ayrılmış ve iyi bilinen özelliklere başvurma.
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
Proje dosyalarındaki ortam değişkenlerine, ayrılmış özelliklere başvurduğunuz şekilde başvurabilirsiniz. Örneğin, proje dosyanızda PATH
ortam değişkenini kullanmak için, $(Yol) işaretini kullanın. Proje, ortam özelliği ile aynı ada sahip bir özellik tanımı içeriyorsa projedeki özellik, ortam değişkeninin değerini geçersiz kılar.
Her MSBuild projesi bir yalıtılmış ortam bloğuna sahiptir; yalnızca kendi bloğundaki okumaları ve yazmaları görür. Proje dosyası değerlendirilmeden veya oluşturulmadan önce MSBuild, özellik koleksiyonunu başlattığında yalnızca ortam değişkenlerini okur. Bunun ardından bu ortam özellikleri statiktir, yani her bir araç aynı adlar ve değerler ile 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, EnvironmentVariables görev parametresinin kullanılmasıdır. Bu dize dizisinde ayarlanan ortam özellikleri, sistem ortamı değişkenlerini etkilemeden oluşturulan araca gönderilebilir.
Bahşiş
Tüm ortam değişkenleri, başlangıç özellikleri olması için okunmaz. 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 Value
öğesini atın.
$(registry:Hive\MyKey\MySubKey)
Bu kayıt defteri değeri, bir yapı özelliğini başlatmak için kullanılabilir. Örneğin, Visual Studio web tarayıcısı giriş sayfasını temsil eden bir yapı ö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
Target
öğeleri dışında konumlanan özelliklere, bir yapının değerlendirme aşamasında değerler atanır. Sonraki yürütme aşamasında özellikler aşağıdaki şekilde 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
PropertyName
bir alt Output öğesi olmalıdır.Bir özellik CreateProperty görevi tarafından yayılabilir. Bu kullanım önerilmiyor.
Target
öğeleri, özellik bildirimleri içerebilecek öğeler içerebilirPropertyGroup
.
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 özellikleri içerir, ancak değiştirilemeyen ayrılmış özellikleri içermez.
Aşağıdaki örnek genel Configuration
özelliğini DEBUG
olarak ayarlar.
msbuild.exe MyProj.proj -p:Configuration=DEBUG
Genel özellikler, MSBuild görevinin Properties
özniteliğini kullanarak aynı zamanda çoklu bir proje yapısındaki alt projeler için 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 TreatAsLocalProperty
ile de değiştirebilir.
Yerel özelliklere sahip örnek
Aşağıdaki kod örneği, etkisini TreatAsLocalProperty
gö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 GlobalOverrideValue
verdiğinizi TreatedAsLocalProperty
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.proj -->
<Project TreatAsLocalProperty="TreatedAsLocalProp">
<PropertyGroup>
<TreatedAsLocalProp>ImportOverrideValue</TreatedAsLocalProp>
</PropertyGroup>
<!-- Here, TreatedAsLocalProp has the value "ImportOverrideValue"-->
</Project>
için TreatedAsLocalProp
aşağıdaki gibi bir genel değer oluşturup importer.proj
ayarladığınızı varsayalım:
dotnet msbuild .\importer.proj -p:TreatedAsLocalProp=GlobalOverrideValue
Çıktı şu olur:
importer.proj(9,9): warning : TreatedAsLocalProp(importer.proj): GlobalOverrideValue
Şimdi özelliğiyle TrySecondOverride
true
oluşturduğunuzu varsayalım:
dotnet msbuild .\importer.proj -p:TreatedAsLocalProp=GlobalOverrideValue -p:TrySecondOverride=true
Çıktı şu olur:
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 TreatAsLocalProperty
kullanıldığı içeri aktarılan projeden sonra 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 projeden TreatAsLocalProperty
ö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 işlevleri
.NET Framework sürüm 4'ten başlayarak, MSBuild komut dosyalarınızı değerlendirmek için özellik işlevlerini kullanabilirsiniz. MSBuild görevlerini kullanmadan, yapı komut dosyanızdaki sistem saatini okuyabilir, dizeleri karşılaştırabilir, normal ifadeleri eşleştirebilir ve başka birçok eylemi gerçekleştirebilirsiniz.
Herhangi bir özelliğin üzerinde gerçekleştirmek için dize (örnek) yöntemlerini kullanabilirsiniz ve birçok sistem sınıfının statik yöntemlerini çağırabilirsiniz. Örneğin, bir yapı özelliğini bugünün tarihine aşağıdaki gibi 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çirilmesini veya günlük bilgilerin görüntülenmesini sağlayabilecek rastgele bir XML içerebilir. Aşağıdaki örnek, XML ve diğer özellik başvurularını içeren bir değere sahip olan ConfigTemplate
özelliğini gösterir. 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)
öğelerinin önceden tanımlanmış olması gerekir.
<PropertyGroup>
<ConfigTemplate>
<Configuration>
<Startup>
<SupportedRuntime
ImageVersion="$(MySupportedVersion)"
Version="$(MySupportedVersion)"/>
<RequiredRuntime
ImageVersion="$(MyRequiredVersion)"
Version="$(MyRequiredVersion)"
SafeMode="$(MySafeMode)"/>
</Startup>
</Configuration>
</ConfigTemplate>
</PropertyGroup>