Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
MSBuild, Condition özniteliğine izin verilen her yerde uygulanabilecek belirli bir koşul kümesini destekler; bkz. Desteklenen öğeler. Aşağıdaki tabloda bu koşullar açıklanmaktadır.
| Koşul | Açıklama |
|---|---|
'stringA' == 'stringB' |
stringA
stringBeşitse true olarak değerlendirir.Mesela: Condition="'$(Configuration)'=='DEBUG'"Basit alfasayısal dizeler veya boole değerleri için tek tırnak işareti gerekmez. Ancak boş değerler için tek tırnak işareti gerekir. Bu denetim büyük/küçük harfe duyarlı değildir. |
'stringA' != 'stringB' |
stringA
stringBeşit değilse true olarak değerlendirir.Mesela: Condition="'$(Configuration)'!='DEBUG'"Basit alfasayısal dizeler veya boole değerleri için tek tırnak işareti gerekmez. Ancak boş değerler için tek tırnak işareti gerekir. Bu denetim büyük/küçük harfe duyarlı değildir. |
| <, >, <=, >= | İşlenenlerin sayısal değerlerini değerlendirir. İlişkisel değerlendirme doğruysa true döndürür. İşlenenler ondalık veya onaltılık sayı ya da dört bölümlü noktalı sürüm olarak değerlendirilmelidir. Onaltılık sayılar 0xile başlamalıdır.
Not: XML'de, < ve > karakterlerinin kaçılması gerekir.
< simgesi <olarak temsil edilir.
> simgesi >olarak temsil edilir. |
Exists('stringA') |
stringA adlı bir dosya veya klasörün mevcut olup olmadığını true değerlendirir.Mesela: Condition="!Exists('$(Folder)')"Basit alfasayısal dizeler veya boole değerleri için tek tırnak işareti gerekmez. Ancak boş değerler için tek tırnak işareti gerekir. Bu koşul, *gibi joker karakterleri genişletmez. |
HasTrailingSlash('stringA') |
Belirtilen dize sondaki bir ters eğik çizgi (\) veya eğik çizgi (/) karakteri içeriyorsa true olarak değerlendirilir.Mesela: Condition="!HasTrailingSlash('$(OutputPath)')"Basit alfasayısal dizeler veya boole değerleri için tek tırnak işareti gerekmez. Ancak boş değerler için tek tırnak işareti gerekir. |
| ! | İşlenen falseolarak değerlendirilirse true olarak değerlendirilir. |
And |
her iki işlenen de trueolarak değerlendirilirse true olarak değerlendirir. |
Or |
İşlenenlerden en az biri trueolarak değerlendirilirse true olarak değerlendirilir. |
| () | içinde yer alan ifadeler trueolarak değerlendirilirse true olarak değerlendirilen gruplandırma mekanizması. |
$if$ ( %expression% ), $else$, $endif$ |
Belirtilen %expression% geçirilen özel şablon parametresinin dize değeriyle eşleşip eşleşmediğini denetler.
$if$ koşulu trueolarak değerlendirilirse deyimleri çalıştırılır; aksi takdirde, $else$ koşulu denetlendi.
$else$ koşulu trueise deyimleri çalıştırılır; aksi takdirde, $endif$ koşulu ifade değerlendirmesini sonlandırır.Kullanım örnekleri için bkz. Visual Studio proje/öğe şablonu parametre mantığı. |
Condition öğesi tek bir dizedir ve bu nedenle özellik değerleri dahil olmak üzere ifadede kullanılan tüm dizelerin tek tırnak içine alınması gerekir. İşleçler arasındaki boşluklara izin verilir ve okunabilirlik için yaygın olarak kullanılır, ancak bunlar gerekli değildir.
Boole And ve Or işleçlerini kullanmak için, aşağıdaki örnekte olduğu gibi Condition öğesinin dize değerinin içinde işlenenleri belirtin:
Condition="'$(Configuration)' == 'Debug' And '$(MSBuildProjectExtension)' == '.csproj'"
Boole işleçlerini zincirleyebilirsiniz. İşleç AndOr'den daha yüksek önceliğe sahiptir, ancak netlik için, değerlendirme sırasını açık hale getirmek için birden çok Boole işleci kullanırken parantezler kullanmanızı öneririz. Aksi takdirde MSBuild MSB4130 uyarı verir.
Aşağıdaki örnekte gösterildiği gibi, .NET Framework ile .NET Core hedef çerçeveleri arasında ayrım yapmak için dizenin yalnızca ilgili bölümünü karşılaştırmak için TrimEnd() işlevinin kullanıldığı koşullarda dize yöntemlerini kullanabilirsiniz.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net45;net48;netstandard2.1;netcoreapp2.1;netcoreapp3.1</TargetFrameworks>
</PropertyGroup>
<PropertyGroup Condition="'$(TargetFramework.TrimEnd(`0123456789`))' == 'net'">
<!-- Properties for .NET Framework -->
</PropertyGroup>
</Project>
MSBuild proje dosyalarında gerçek Boole türü yoktur. Boole verileri boş veya herhangi bir değere ayarlanmış özelliklerde temsil edilir. Bu nedenle, '$(Prop)' == 'true' "Prop trueise" anlamına gelir, ancak '$(Prop)' != 'false' "Prop true veya ayarlanmamışsa veya başka bir şeye ayarlanmışsa" anlamına gelir.
Boole mantığı yalnızca koşullar bağlamında değerlendirilir, bu nedenle <Prop2>'$(Prop1)' == 'true'</Prop> gibi özellik ayarları Boole değerleri olarak değerlendirilmeyen bir dize (değişken genişletmeden sonra) olarak temsil edilir.
MSBuild, Boole değerleri olarak kullanılan dize özellikleriyle çalışmayı kolaylaştırmak için birkaç özel işleme kuralı uygular. Boole değişmez değerleri kabul edilir, bu nedenle Condition="true" ve Condition="false" beklendiği gibi çalışır. MSBuild ayrıca Boole olumsuzlama işlecini desteklemek için özel kurallar içerir. Bu nedenle, $(Prop) 'true' ise, !$(Prop)!true olarak genişletilir ve bu değer beklediğiniz gibi falsedeğerine eşit olarak karşılaştırılır.
Sürümleri karşılaştırma
İlişkisel işleçler <, >, <=ve >=, System.Versiontarafından ayrıştırılan sürümleri destekler. Böylece, dört sayısal bölümü olan sürümleri birbiriyle karşılaştırabilirsiniz. Örneğin, '1.2.3.4' < '1.10.0.0'true.
Dikkat
System.Version karşılaştırmaları, bir veya her iki sürüm dört bölümün tümünü belirtmediğinde şaşırtıcı sonuçlara neden olabilir. Örneğin, sürüm 1.1 sürüm 1.1.0'dan daha eskidir.
MSBuild, anlamsal sürüm oluşturma (semver) ile uyumlu farklı bir kural kümesine sahip sürümleri karşılaştırmak için özellik işlevleri sağlar.
Koşullarda genişletmeler
Proje dosyasındaki konuma bağlı olarak, özellikler ($), öğe listeleri (@) ve öğe meta verileri (%) için genişletmeleri kullanabilirsiniz. Genişletmeler, MSBuild'in proje dosyalarını nasıl işlediğinebağlıdır.
Özellikler
$(SomeProperty) gibi bir ifade içeren koşul değerlendirilir ve özellik değerine dönüştürülür. Koşul bir hedefin dışındaysa, ifade proje dosyasının değerlendirmesi sırasında değerlendirilir. özelliğinin değeri, tüm içeri aktarmalar genişletildikten sonra proje dosyasındaki konuma bağlıdır. Koşul bir hedefteyse, hedef yürütülürken değerlendirilir ve değer derlemenin yürütülmesi sırasında gerçekleşen değişikliklerden etkilenir.
Genişletilmiş proje dosyasında koşul ifadesinin oluştuğu noktada tanımlanmayan bir özellik, herhangi bir tanılama hatası veya uyarı olmadan boş bir dize olarak değerlendirilir.
Öğe listeleri
@(SomeItems) gibi bir @-ifade içeren koşul, öğe gruplarında en üst düzeyde ve hedeflerde genişletilir.
Öğeler herhangi bir özelliğe bağımlı olabilir ve sıralı olarak zaten tanımlanmış öğelere bağımlı olabilir.
Bunun nedeni, MSBuild'in proje dosyalarını birkaç geçişte işlemesidir. Öğe değerlendirme geçişi, ilk özellik değerlendirmesi ve içeri aktarma genişletme geçişi sonrasında gerçekleşir. Bu nedenle, öğeler tanımlanmaya başladıktan sonra değerlendirilen herhangi bir koşulda @-ifadelere izin verilir. Yani, öğelerde, öğe gruplarında ve hedeflerde.
Meta veriler
%(ItemMetadata) gibi bir meta veri ifadesi içeren bir koşul, öğe listeleriyle aynı bağlamlarda, yani en üst düzeydeki öğe gruplarında ve hedeflerde genişletilir. Ancak, öğe grubunun hedefin dışında mı yoksa hedefin içinde mi olduğuna bağlı olarak, genişletmenin bir öğe grubunda farklı davranışları olabilir. Ayrıca, %(ItemName.MetadataName), %(JustTheMetadataName)ve @(ItemName->'%(MetadataName)')meta veri ifadelerinin çeşitli biçimlerinde, hedef dışında yalnızca öğe dönüşümüne (sonuncusu) izin verilir. Hedefteki %-ifadesinin değeri çalışma zamanında değerlendirilir ve hedef yürütme sırasındaki durum değişikliklerine bağlıdır. Hedefin yürütülmesi ve içindeki %ifadelerinin değeri de hedefin toplu işlemesine bağlıdır ve toplu işlemi tetikleyebilir; bkz. MSBuild toplu .
Desteklenen öğeler
Aşağıdaki öğeler Condition özniteliğini destekler:
- Ithalat
- ImportGroup
- Madde
- ItemDefinitionGroup
- ItemGroup
- ItemMetadata
- OnError
- Çıktı
- Mülk
- PropertyGroup
- Hedef
- Görev
- UsingTask
- Ne zaman
Ayrıca bkz.
- MSBuild başvuru
- koşullu yapıları
- İzlenecek Yol: Sıfırdan MSBuild proje dosyası oluşturma