MSBuild koşulları

MSBuild, bir özniteliğin izin verilen her yerde uygulanabileceği belirli bir Condition koşul kümesini destekler. Aşağıdaki tabloda bu koşullar açıklanmaktadır.

Koşul Description
'stringA' == 'stringB' eşitse stringAstringBdeğerini true olarak değerlendirir.

Örnek:

Condition="'$(Configuration)'=='DEBUG'"

Basit alfasayısal dizeler veya boole değerleri için tek tırnak 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' true değerine eşit stringBdeğilse stringA değerini değerlendirir.

Örnek:

Condition="'$(Configuration)'!='DEBUG'"

Basit alfasayısal dizeler veya boole değerleri için tek tırnak 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 döndürür true . İşlenenler ondalık veya onaltılık bir sayı ya da dört parçalı noktalı sürüm olarak değerlendirilmelidir. Onaltılık sayılar "0x" ile başlamalıdır. Not: XML'de ve > karakterlerinin < kaçış karakteri olması gerekir. simgesi < olarak &lt;temsil edilir. simgesi > olarak &gt;temsil edilir.
Exists('stringA') true Adlı stringA bir dosya veya klasörün mevcut olup olmadığını değerlendirir.

Örnek:

Condition="!Exists('$(Folder)')"

Basit alfasayısal dizeler veya boole değerleri için tek tırnak gerekmez. Ancak, boş değerler için tek tırnak işareti gerekir. Bu koşul gibi *joker karakterleri genişletmez.
HasTrailingSlash('stringA') true Belirtilen dizenin sonunda ters eğik çizgi (\) veya eğik çizgi (/) karakteri olup olmadığını değerlendirir.

Örnek:

Condition="!HasTrailingSlash('$(OutputPath)')"

Basit alfasayısal dizeler veya boole değerleri için tek tırnak gerekmez. Ancak, boş değerler için tek tırnak işareti gerekir.
! true İşlenen öğesinin olarak değerlendirilip değerlendirilmediğini değerlendirirfalse.
And true her iki işlenenin de olarak değerlendirilip değerlendirilmediğini değerlendirirtrue.
Or İşlenenlerden true en az birinin olarak değerlendirilip değerlendirilmediğini değerlendirir true.
() içinde yer alan ifadelerin true olarak değerlendirilip değerlendirilmediğini değerlendiren gruplandırma truemekanizması.
$if$ ( %expression% ), $else$, $endif$ Belirtilen %expression% değerin geçirilen özel şablon parametresinin dize değeriyle eşleşip eşleşmediğini denetler. $if$ Koşul olarak değerlendirilirsetrue, deyimleri çalıştırılır; aksi takdirde koşul $else$ denetlener. $else$ Koşul ise truedeyimleri çalıştırılır; aksi takdirde koşul ifade değerlendirmesini $endif$ sonlandırır.

Kullanım örnekleri için bkz. Visual Studio proje/öğe şablonu parametre mantığı.

Dize yöntemlerini, aşağıdaki örnekte gösterildiği gibi, .NET Framework ve .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 Kullanılan TrimEnd() işlevinin kullanıldığı koşullarda 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 doğru Boole türü yoktur. Boole verileri boş olabilecek veya herhangi bir değere ayarlanmış özelliklerde temsil edilir. Bu nedenle, '$(Prop)' == 'true' "Prop ise true" anlamına gelir, ancak '$(Prop)' != 'false' "Prop başka bir şeye true ayarlanmışsa veya ayarlanmamışsa" anlamına gelir.

Boole mantığı yalnızca koşullar bağlamında değerlendirilir, bu nedenle gibi <Prop2>'$(Prop1)' == 'true'</Prop> özellik ayarları bir dize olarak temsil edilir (değişken genişletmeden sonra), Boole değerleri olarak değerlendirilmez.

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 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 , 'true' ise $(Prop) olarak !$(Prop) genişletilir !true ve beklediğiniz gibi ile karşılaştırılır false.

Sürümleri karşılaştırma

İlişkisel işleçler <, >, <=ve >= tarafından ayrıştırılan System.Versionsü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' , şeklindedir 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, 1.1 sürümü 1.1.0 sürümünden 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.

Ayrıca bkz.