Tulajdonság funkciók

A tulajdonságfüggvények az MSBuild tulajdonságdefiníciókban megjelenő .NET-metódusok hívásai. Ezek általában összetettebb logikát igénylő tulajdonságdefiníciók létrehozásához használhatók.

A tevékenységektől eltérően a tulajdonságfüggvények a célokon kívül is használhatók. A tulajdonságfüggvények kiértékelése a tulajdonságok vagy elemek kibontásakor történik. A célokon kívüli tulajdonságok és elemek esetében tehát a tulajdonságfüggvények kiértékelése a cél futtatása előtt történik. A célon belüli tulajdonságcsoportok és elemcsoportok esetében a rendszer kiértékeli a tulajdonságfüggvényeket a cél végrehajtásakor.

Az MSBuild-feladatok használata nélkül elolvashatja a rendszeridőt, összehasonlíthatja a sztringeket, megfeleltetheti a reguláris kifejezéseket, és egyéb műveleteket hajthat végre a buildszkriptben. Az MSBuild megpróbálja a sztringet számmá, illetve a számot sztringgé alakítani, és szükség szerint más átalakításokat végez.

A tulajdonságfüggvényekből visszaadott sztringértékek speciális karaktereket tartalmaznak. Ha azt szeretné, hogy az érték úgy legyen kezelve, mintha közvetlenül a projektfájlban lett volna elhelyezve, használja a $([MSBuild]::Unescape()) kódot a speciális karakterek visszavonására.

Tulajdonságfüggvény szintaxisa

Háromféle tulajdonságfüggvény létezik; mindegyik típus más szintaxissal rendelkezik:

  • Karakterlánc (példány) tulajdonsági funkciók
  • Statikus tulajdonságfüggvények
  • MSBuild tulajdonságfüggvények

Sztringtulajdonság-függvények

A build tulajdonságok minden értéke csak karakterlánc érték. Bármely tulajdonságértéken végezhet műveleteket sztring (példány) metódusokkal. Kinyerheti például a meghajtó nevét (az első három karaktert) egy olyan buildtulajdonságból, amely egy teljes elérési utat jelöl ezzel a kóddal:

$(ProjectOutputFolder.Substring(0,3))

Statikus tulajdonságfüggvények

A buildszkriptben számos rendszerosztály statikus tulajdonságait és metódusait érheti el. Egy statikus tulajdonság értékének lekéréséhez használja az alábbi szintaxist, amelyben Class a rendszerosztály neve és Property a tulajdonság neve szerepel.

$([Class]::Property)

Az alábbi kód használatával például beállíthat egy buildtulajdonságot az aktuális dátumra és időpontra.

<Today>$([System.DateTime]::Now)</Today>

Statikus metódus meghívásához használja a következő szintaxist, ahol Class a rendszerosztály neve szerepel, Method a metódus neve, és (Parameters) a metódus paraméterlistája:

$([Class]::Method(Parameters))

Ha például egy buildtulajdonságot új GUID-ra szeretne beállítani, használja ezt a szkriptet:

<NewGuid>$([System.Guid]::NewGuid())</NewGuid>

Túlterhelt metódusok esetén az MSBuild egy egyező paraméterekkel rendelkező metódust próbál megkeresni.

Az MSBuild 17.14-ben és újabb verzióiban a paraméterszintaxis out _ használatával adhat meg egy paramétert out . Lásd a referenciaparamétereket. A out paraméter értéke figyelmen kívül lesz hagyva. Például:

<IsInteger>$([System.Int32]::TryParse("123", out _))</IsInteger>

A tulajdonság IsInteger az, true ha a bemenet egész számként van elemezve, de az elemzési érték figyelmen kívül lesz hagyva.

A statikus tulajdonságfüggvényekben a .NET Standard 2.0-ban definiált bármely nyilvános statikus metódust vagy tulajdonságot használhat az alábbi rendszerosztályokhoz:

Megjegyzés:

A .NET Standard 2.0-ban nem definiált metódusok és tulajdonságok akkor érhetők el, ha az MSBuildet olyan környezetben használja, amely támogatja őket, de nem garantálható, hogy minden helyzetben elérhető. Kompatibilitási okokból ezeket érdemes elkerülni.

Emellett a következő statikus módszereket és tulajdonságokat is használhatja:

System.OperatingSystem tulajdonságai

A System.OperatingSystem tulajdonságfüggvények arról az operációs rendszerről adnak vissza információt, amelyen az MSBuild fut. Ha például a projekt a Linuxot célozza meg, és macOS rendszerre építi, a tulajdonságfüggvények a macOS-ről adnak vissza információkat.

A .NET-en (dotnet build) futó MSBuildben az System.OperatingSystem osztály összes statikus metódusa statikus tulajdonságfüggvényként hívható meg.

A .NET-keretrendszeren (MSBuild.exe) futó MSBuildben csak a következő metódusok System.OperatingSystem hívhatók statikus tulajdonságfüggvényekként. Az MSBuild belsőleg implementálja őket, mert System.OperatingSystem nem definiálja őket a .NET-keretrendszerben. Azok az operációs rendszerek, amelyeknél nincs .NET SDK, például System.OperatingSystem::IsTvOS, nem hívhatók.

Az alábbi példa a tulajdonságfüggvények használatát mutatja be.

<IsWindows>$([System.OperatingSystem]::IsWindows())</IsWindows>

Példány metódusainak meghívása statikus tulajdonságokon

Ha egy objektumpéldányt visszaadó statikus tulajdonsághoz fér hozzá, meghívhatja az objektum példánymetódusait. Példánymetódus meghívásához használja a következő szintaxist, ahol Class a rendszerosztály neve, Property a tulajdonság neve, Method a metódus neve, és (Parameters) a metódus paraméterlistája:

$([Class]::Property.Method(Parameters))

Az osztály nevét teljes mértékben a névtérrel együtt kell megadni.

Az alábbi kód használatával például beállíthat egy buildtulajdonságot az aktuális dátumra.

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

MSBuild tulajdonságfüggvények

A buildben számos statikus metódus érhető el, hogy számtani, bitenkénti logikai és escape karakter támogatást biztosítson. Ezeket a metódusokat az alábbi szintaxissal érheti el, ahol Method a metódus neve és (Parameters) a metódus paraméterlistája található.

$([MSBuild]::Method(Parameters))

Ha például két numerikus értékkel rendelkező tulajdonságot szeretne összeadni, használja az alábbi kódot.

$([MSBuild]::Add($(NumberOne), $(NumberTwo)))

Íme az MSBuild tulajdonságfüggvények listája:

Függvény szignatúra Leírás
double Add(double a, double b) Adjon hozzá két duplát.
long Add(long a, long b) Adjon hozzá két hosszú elemet.
int BitwiseOr(int first, int second) Az elsőn és a másodikon hajts végre egy bitenkénti OR műveletet (első | második).
int BitwiseAnd(int first, int second) Végezzen el egy bitenkénti AND műveletet az első és a második (első és második) számon.
int BitwiseXor(int first, int second) Végezzen bitenkénti XOR műveletet az első és a második (első ^ második) között.
int BitwiseNot(int first) Hajtsa végre a bitenkénti (~első) műveletet NOT .
string CheckFeatureAvailability(string featureName) A szolgáltatásnevet sztringként adja vissza, ha és csak akkor, ha az MSBuild ezen verziójában a megadott funkció támogatott.
string ConvertToBase64(string toEncode) Visszaadja a karakterláncot, miután az összes bájtot base 64-re konvertálta (alfanumerikus karakterek plusz + és /), végződve egy vagy két = karakterrel.
string ConvertFromBase64(string toDecode) Visszaadja a karakterláncot, miután átalakította a 64-es alapból (alfanumerikus karakterek, plusz + és /), és egy vagy két =-ra végződik.
double Divide(double a, double b) Két dupla osztás.
long Divide(long a, long b) Ossz el két hosszú egész számot.
bool DoesTaskHostExist(string runtime, string architecture) Azt adja vissza, hogy egy feladatgazda jelenleg telepítve van-e a megadott futtatókörnyezeti és architektúraértékekhez. Lásd: MSBuild DoesTaskHostExist.
string Escape(string unescaped) Az MSBuild menekülési szabályainak megfelelően lépjen ki a sztringből.
string EnsureTrailingSlash(string path) Ha a megadott elérési út nem rendelkezik záró perjellel, akkor adjon hozzá egyet. Ha az elérési út üres karakterlánc, akkor nem módosítja. Lásd: MSBuild EnsureTrailingSlash.
string FilterTargetFrameworks(string incoming, string filter) Adja vissza a megadott szűrőnek megfelelő cél-keretrendszerek listáját. A cél-keretrendszerek megmaradnakincoming, ha azok megegyeznek a kívánt cél-keretrendszerek bármelyikével.filter Lásd: MSBuild TargetFramework és TargetPlatform függvények.
string GetCurrentToolsDirectory() Szerezze be az MSBuild eszközök aktuális könyvtárát.
string GetMSBuildExtensionsPath() Lekéri az MSBuild bővítmények elérési útját. AMSBuild.exefuttatásakor ez általában az MSBuild végrehajtható mappa. A Visual Studióban való futtatáskor ez az MSBuild almappája a Visual Studio telepítési mappájában.
string GetMSBuildSDKsPath() Lekéri azt a könyvtárat, amelyben SDK-k várhatók az aktuális MSBuild-példányhoz.
string GetProgramFiles32() Lekéri a fájlrendszer gyökérmappát, ahol általában 32 bites szoftvercsomagok vannak telepítve. Például: C:\Program Files (x86).
string GetTargetFrameworkIdentifier(string targetFramework) A TargetFrameworkIdentifier-t ki kell elemezni a TargetFrameworkből. Lásd: MSBuild TargetFramework és TargetPlatform függvények.
string GetTargetFrameworkVersion(string targetFramework, int versionPartCount) Elemezd a TargetFrameworkVersion-t a TargetFramework-ből. Lásd: MSBuild TargetFramework és TargetPlatform függvények.
string GetTargetPlatformIdentifier(string targetFramework) Elemezze a TargetPlatformIdentifiert a TargetFrameworkből. Lásd: MSBuild TargetFramework és TargetPlatform függvények.
string GetTargetPlatformVersion(string targetFramework, int versionPartCount) A TargetPlatformVersion kibontása a TargetFrameworkből. Lásd: MSBuild TargetFramework és TargetPlatform függvények.
string GetToolsDirectory32() Lekéri azt a könyvtárat, ahol az MSBuild-eszközök 32 bites verziói találhatók.
string GetToolsDirectory64() Lekéri azt a könyvtárat, amelyben az MSBuild-eszközök 64 bites verziói találhatók.
string GetDirectoryNameOfFileAbove(string startingDirectory, string fileName) Keresse meg és adja vissza egy fájl könyvtárát a megadott könyvtárban, vagy a könyvtár fölötti könyvtárstruktúra egy helyét. Lásd: MSBuild GetDirectoryNameOfFileAbove.
string GetPathOfFileAbove(string file, string startingDirectory) Megkeresi és visszaadja egy fájl teljes elérési útját a könyvtárstruktúrában az aktuális buildfájl helyén vagy felett, vagy startingDirectory, ha meg van adva. Lásd: MSBuild GetPathOfFileAbove.
object GetRegistryValue(string keyName, string valueName, object defaultValue) Szerezze meg a beállításkulcs értékét. Lásd MSBuild GetRegistryValue.
object GetRegistryValueFromView(string keyName, string valueName, object defaultValue, params object[] views) Lekéri a rendszerregisztrációs adatbázis adatait a beállításkulcs, az érték és egy vagy több rendezett beállításjegyzék-nézet alapján. Lásd: MSBuild GetRegistryValueFromView.
string GetVsInstallRoot() Lekéri az MSBuild aktuális példányához társított Visual Studio telepítési mappa gyökérmappájának teljes elérési útját.
bool IsOsPlatform(string platformString) Adja meg, hogy az aktuális operációs rendszer platform platformString. A(z) platformString-nak a(z) OSPlatform tagjának kell lennie.
bool IsOsBsdLike() Igaz, ha a jelenlegi operációs rendszer egy BSD-stílusú Unix-rendszer.
bool IsOSUnixLike() Igaz, ha a jelenlegi operációs rendszer Unix rendszer.
bool IsTargetFrameworkCompatible(string targetFrameworkTarget, string targetFrameworkCandidate) "Igaz" értéket ad vissza, ha a jelölt cél-keretrendszer (második argumentum) kompatibilis az első argumentumban megjelölt cél-keretrendszerrel, és ellenkező esetben hamis. Lásd: MSBuild TargetFramework és TargetPlatform függvények.
int LeftShift(int operand, int count) Shifteljen balra count bitet. MSBuild 17.7 és újabb verziók.
string MakeRelative(string basePath, string path) Tegye `path` relatívvá `basePath`-hez képest. basePath abszolút könyvtárnak kell lennie. Ha path nem tehető relatívvé, a rendszer szó szerint visszaadja. Hasonló aUri.MakeRelativeUri. Lásd: MSBuild MakeRelative.
double Modulo(double a, double b) Modulo két dupla.
long Modulo(long a, long b) Modulo két hosszú.
double Multiply(double a, double b) Két dupla szorzás.
long Multiply(long a, long b) Két hosszú egész szám szorzása.
string NormalizeDirectory(params string[] path) Lekéri a megadott könyvtár teljes, kanonizált elérési útját, és gondoskodik arról, hogy a megfelelő könyvtárelválasztó karaktereket tartalmazza az aktuális operációs rendszer számára, miközben biztosítja a végződő perjelet.
string NormalizePath(params string[] path) Lekéri a megadott elérési út teljes canonicalizált elérési útját, és biztosítja, hogy a megfelelő könyvtárelválasztó karaktereket tartalmazza az aktuális operációs rendszer számára.
int RightShift(int operand, int count) Jobbra tolás count bitnyivel, mint előjeles egész szám. MSBuild 17.7 és újabb verziók.
int RightShiftUnsigned(int operand, int count) count Jobbra váltás bitekkel, az operandus nem aláírt egész számként kezelve. MSBuild 17.7 és újabb verziók.
object StableStringHash(string toHash, StringHashingAlgorithm algo) Sztringargumentumot fogad el, és olyan kivonatkódot ad vissza, amely garantáltan stabil. Lásd: MSBuild StableStringHash.
string SubstringByAsciiChars(string input, int start, int length) A input sztringből ASCII-kódolás alapján visszaad egy részsztringet, amely a megadott start pozíciónál kezdődik és a megadott length hosszúságú.
double Subtract(double a, double b) Két dupla kivonása.
long Subtract(long a, long b) Két hosszú egész szám kivonása.
string Unescape(string escaped) Bontsa ki a sztringet az MSBuild menekülési szabályainak megfelelően.
string ValueOrDefault(string conditionValue, string defaultValue) A paraméterben defaultValue szereplő sztringet csak akkor adja vissza, ha a paraméter conditionValue üres, máskülönben az értéket conditionValueadja vissza. Lásd : MSBuild ValueOrDefault.
bool VersionEquals(string a, string b) Adja vissza true , ha a verziók ab megegyeznek az alábbi szabályok szerint. Lásd: MSBuild verzió-összehasonlító függvények.
bool VersionGreaterThan(string a, string b) Adja vissza true , ha a verzió a nagyobb, mint b az alábbi szabályok szerint. Lásd: MSBuild verzió-összehasonlító függvények.
bool VersionGreaterThanOrEquals(string a, string b) Adja vissza true , ha a verzió a nagyobb vagy egyenlő b az alábbi szabályok szerint. Lásd: MSBuild verzió-összehasonlító függvények.
bool VersionLessThan(string a, string b) Adja vissza true , ha a verzió a kisebb, mint b az alábbi szabályok szerint. Lásd: MSBuild verzió-összehasonlító függvények.
bool VersionLessThanOrEquals(string a, string b) Akkor adja vissza true , ha a verzió a kisebb vagy egyenlő b az alábbi szabályok szerint. Lásd: MSBuild verzió-összehasonlító függvények.
bool VersionNotEquals(string a, string b) Adja vissza false , ha a verziók ab megegyeznek az alábbi szabályok szerint. Lásd: MSBuild verzió-összehasonlító függvények.

Beágyazott tulajdonságfüggvények

A tulajdonságfüggvények kombinálásával összetettebb függvényeket alkothat, ahogy az alábbi példa is mutatja:

$([MSBuild]::BitwiseAnd(32, $([System.IO.File]::GetAttributes(tempFile))))

Ez a példa visszaadja a FileAttributes értékét. Archive az elérési út tempFileáltal megadott fájl bitje (32 vagy 0). Figyelje meg, hogy a számba vett adatértékek bizonyos környezetekben nem jelenhetnek meg név szerint. Az előző példában a numerikus értéket (32) kell használni. Más esetekben a metódus elvárásaitól függően az enumerálási adatértéket kell használni. Az alábbi példában az enum értéke RegexOptions. ECMAScript azért kell használni, mert egy numerikus érték nem konvertálható úgy, ahogy ez a metódus elvárja.

<PropertyGroup>
    <GitVersionHeightWithOffset>$([System.Text.RegularExpressions.Regex]::Replace("$(PrereleaseVersion)", "^.*?(\d+)$", "$1", "System.Text.RegularExpressions.RegexOptions.ECMAScript"))</GitVersionHeightWithOffset>
</PropertyGroup>

A metaadatok beágyazott tulajdonságfüggvényekben is megjelenhetnek. További információ: Batching.

MSBuild DoTaskHostExist

Az DoesTaskHostExist MSBuild tulajdonságfüggvénye azt adja vissza, hogy egy feladatgazda jelenleg telepítve van-e a megadott futtatókörnyezeti és architektúraértékekhez.

Ez a tulajdonságfüggvény a következő szintaxist tartalmazza:

$([MSBuild]::DoesTaskHostExist(string theRuntime, string theArchitecture))

MSBuild EnsureTrailingSlash

Az EnsureTrailingSlash tulajdonságfüggvény az MSBuildben hozzáad egy záró perjelet, ha még nem létezik.

Ez a tulajdonságfüggvény a következő szintaxist tartalmazza:

$([MSBuild]::EnsureTrailingSlash('$(PathProperty)'))

MSBuild GetDirectoryNameOfFileAbove

Az MSBuild GetDirectoryNameOfFileAbove tulajdonságfüggvény felfelé keres egy, a megadott fájlt tartalmazó könyvtárban, a megadott könyvtártól kezdve (és azokat is beleértve). Ha megtalálható, a fájlt tartalmazó legközelebbi könyvtár teljes elérési útját adja vissza, ellenkező esetben üres sztringet.

Ez a tulajdonságfüggvény a következő szintaxist tartalmazza:

$([MSBuild]::GetDirectoryNameOfFileAbove(string startingDirectory, string fileName))

Ez a példa bemutatja, hogyan importálhatja a legközelebbi EnlistmentInfo.props fájlt az aktuális mappába vagy fölé, csak akkor, ha egyezés található:

<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), EnlistmentInfo.props))\EnlistmentInfo.props" Condition=" '$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), EnlistmentInfo.props))' != '' " />

Ez a példa tömörebben írható a GetPathOfFileAbove függvény használatával:

<Import Project="$([MSBuild]::GetPathOfFileAbove(EnlistmentInfo.props))" Condition=" '$([MSBuild]::GetPathOfFileAbove(EnlistmentInfo.props))' != '' " />

MSBuild GetPathOfFileAbove

Az MSBuild GetPathOfFileAbove tulajdonságfüggvény felfelé keres egy, a megadott fájlt tartalmazó könyvtárban, a megadott könyvtártól kezdve (és azokat is beleértve). Ha megtalálható, a legközelebbi egyező fájl teljes elérési útját adja vissza, egyébként üres sztringet.

Ez a tulajdonságfüggvény a következő szintaxist tartalmazza:

$([MSBuild]::GetPathOfFileAbove(string file, [string startingDirectory]))

hol file található a keresendő fájl neve, és startingDirectory egy nem kötelező könyvtár a keresés indításához. Alapértelmezés szerint a keresés az aktuális fájl saját könyvtárában kezdődik.

Ez a példa bemutatja, hogyan importálhat egy dir.props nevű fájlt az aktuális könyvtárba vagy felett, csak akkor, ha egyezést talál:

<Import Project="$([MSBuild]::GetPathOfFileAbove(dir.props))" Condition=" '$([MSBuild]::GetPathOfFileAbove(dir.props))' != '' " />

amely funkcionálisan egyenértékű a

<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" Condition=" '$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))' != '' " />

Néha azonban el kell indítania a keresést a szülőkönyvtárban, hogy ne egyeztethesse az aktuális fájlt. Ez a példa bemutatja, hogyan importálhatja egy Directory.Build.props fájl a legközelebbi Directory.Build.props fájlt a fa szigorúan magasabb szintjén anélkül, hogy rekurzívan importálja magát:

<Import Project="$([MSBuild]::GetPathOfFileAbove('Directory.Build.props', '$(MSBuildThisFileDirectory)../'))" />

amely funkcionálisan egyenértékű a

<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove('$(MSBuildThisFileDirectory)../', 'Directory.Build.props'))/Directory.Build.props" />

MSBuild GetRegistryValue (RegisztrációsÉrtékLekérése)

Az MSBuild GetRegistryValue tulajdonságfüggvény egy beállításkulcs értékét adja vissza. Ez a függvény két argumentumot vesz fel, a kulcsnevet és az értéknevet, és visszaadja az értéket a beállításjegyzékből. Ha nem ad meg értéknevet, a rendszer az alapértelmezett értéket adja vissza.

Az alábbi példák a függvény használatát mutatják be:

$([MSBuild]::GetRegistryValue(`HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\10.0\Debugger`, ``))                                  // default value
$([MSBuild]::GetRegistryValue(`HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\10.0\Debugger`, `SymbolCacheDir`))
$([MSBuild]::GetRegistryValue(`HKEY_LOCAL_MACHINE\SOFTWARE\(SampleName)`, `(SampleValue)`))             // parens in name and value

Figyelmeztetés

Az MSBuild (dotnet build) .NET SDK-verziójában ez a függvény nem támogatott.

MSBuild GetRegistryValueFromView

Az MSBuild GetRegistryValueFromView tulajdonságfüggvény lekéri a rendszerregisztrációs adatbázis adatait a beállításkulcs, az érték és egy vagy több rendezett beállításjegyzék-nézet alapján. A kulcsot és az értéket minden beállításjegyzék-nézetben sorban keresi a rendszer, amíg meg nem találják őket.

A tulajdonságfüggvény szintaxisa a következő:

[MSBuild]::GetRegistryValueFromView(string keyName, string valueName, object defaultValue, params object[] views)

A Windows 64 bites operációs rendszer egy HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node beállításkulcsot tart fenn, amely egyHKEY_LOCAL_MACHINE\SOFTWARE beállításjegyzék nézetet jelenít meg a 32 bites alkalmazásokhoz.

Alapértelmezés szerint egy WOW64-en futó 32 bites alkalmazás hozzáfér a 32 bites beállításjegyzék nézethez, egy 64 bites alkalmazás pedig a 64 bites beállításjegyzék nézethez.

A következő beállításjegyzék-nézetek érhetők el:

Beállításjegyzék nézet Definíció
RegistryView.Registry32 A 32 bites alkalmazásregisztrációs adatbázis nézet.
RegistryView.Registry64 A 64 bites alkalmazásregisztrációs adatbázis nézet.
AlapértelmezettRegisztrációNézet Az alkalmazás által futtatott folyamatnak megfelelő beállításjegyzék-nézet.

Az alábbiakban egy példa látható.

$([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Silverlight\v3.0\ReferenceAssemblies', 'SLRuntimeInstallPath', null, RegistryView.Registry64, RegistryView.Registry32))

Az előző kód lekéri a ReferenceAssemblies kulcs SLRuntimeInstallPath-adatait, először a 64 bites beállításjegyzék nézetben, majd a 32 bites beállításjegyzék nézetben.

Figyelmeztetés

Az MSBuild (dotnet build) .NET SDK-verziójában ez a függvény nem támogatott.

MSBuild MakeRelative

Az MSBuild MakeRelative tulajdonságfüggvény a második elérési út relatív elérési útját adja vissza az első elérési úthoz viszonyítva. Minden elérési út lehet fájl vagy mappa.

Ez a tulajdonságfüggvény a következő szintaxist tartalmazza:

$([MSBuild]::MakeRelative($(FileOrFolderPath1), $(FileOrFolderPath2)))

Az alábbi kód erre a szintaxisra mutat példát.

<PropertyGroup>
    <Path1>c:\users\</Path1>
    <Path2>c:\users\username\</Path2>
</PropertyGroup>

<Target Name = "Go">
    <Message Text ="$([MSBuild]::MakeRelative($(Path1), $(Path2)))" />
    <Message Text ="$([MSBuild]::MakeRelative($(Path2), $(Path1)))" />
</Target>

<!--
Output:
   username\
   ..\
-->

MSBuild StableStringHash

Az MSBuild tulajdonságfüggvény egy karakterlánc argumentumot fogad el, és egy olyan kivonatkódot ad StableStringHash vissza, amely garantáltan stabil, ami azt jelenti, hogy ugyanarra a karakterlánc bemenetre mindig ugyanazt a kódot adja vissza. A visszaadott kivonat ugyanaz, függetlenül attól, hogy az MSBuild vagy dotnet build a használatban van-e, és a .NET metódustól GetHashCodeeltérően a platformarchitektúrák között stabil. Nem garantált, hogy stabil a különböző MSBuild verziókban.

Ez a függvény az MSBuild 16.9.0-s vagy újabb verziójában érhető el.

Az alábbi példa a függvény használatát mutatja be.

<Project>
   <PropertyGroup>
      <MyHash>$([MSBuild]::StableStringHash("test1"))</MyHash>
   </PropertyGroup>

   <Target Name="WriteHash" AfterTargets="Build">
      <Message Text="Hash: $(MyHash)"/>
   </Target>
</Project>

Az MSBuild 17.10-es és újabb verziójával ez a függvény elfogadja a második, nem kötelező argumentumot, amely a kivonatoló algoritmus használatát kéri:

<Project>
   <PropertyGroup>
      <MyHash>$([MSBuild]::StableStringHash("test1", "Sha256"))</MyHash>
   </PropertyGroup>

   <Target Name="WriteHash" AfterTargets="Build">
      <Message Text="Hash: $(MyHash)"/>
   </Target>
</Project>

A második argumentum nem érzékeny a kis- és nagybetűkre, és jelenleg a következő értékeket támogatja:

  • Hagyományos – ugyanazt a viselkedést tartja meg, mint a függvény meghívása a második argumentum nélkül. Aláírt 32 bites egész számot ad vissza, hasonló tulajdonságokkal, mint a string.GetHashCode.
  • Fnv1a32bit – Aláírt 32 bites egész számot ad vissza, amely az adott sztring "1a" verziójának Fowler–Noll–Vo kivonatát jelöli.
  • Fnv1a64bit – Az előjeles 64 bites egész számot adja vissza, amely az adott sztring „1a” verziójú Fowler–Noll–Vo kivonatát jelképezi.
  • Sha256 – Az adott sztring SHA256-kivonatát képviselő, nem előre megadott hexa sztringet adja vissza.

MSBuild ValueOrDefault (alapértelmezett érték)

Az MSBuild ValueOrDefault tulajdonságfüggvény az első argumentumot adja vissza, kivéve, ha null vagy üres. Ha az első argumentum null vagy üres, a függvény a második argumentumot adja vissza.

Az alábbi példa a függvény használatát mutatja be.

<Project>

    <PropertyGroup>
        <Value1>$([MSBuild]::ValueOrDefault('$(UndefinedValue)', 'a'))</Value1>
        <Value2>$([MSBuild]::ValueOrDefault('b', '$(Value1)'))</Value2>
    </PropertyGroup>

    <Target Name="MyTarget">
        <Message Text="Value1 = $(Value1)" />
        <Message Text="Value2 = $(Value2)" />
    </Target>
</Project>

<!--
Output:
  Value1 = a
  Value2 = b
-->

MSBuild TargetFramework és TargetPlatform függvények

Az MSBuild 16.7 és újabb verziók számos függvényt definiálnak a TargetFramework és a TargetPlatform tulajdonságainak kezeléséhez.

Függvény szignatúra Leírás
FilterTargetFrameworks(string incoming, string filter) Adja vissza a megadott szűrőnek megfelelő cél-keretrendszerek listáját. A cél-keretrendszerek megmaradnakincoming, ha azok megegyeznek a kívánt cél-keretrendszerek bármelyikével.filter
GetTargetFrameworkIdentifier(string targetFramework) A TargetFrameworkIdentifier-t ki kell elemezni a TargetFrameworkből.
GetTargetFrameworkVersion(string targetFramework, int versionPartCount) Elemezd a TargetFrameworkVersion-t a TargetFramework-ből.
GetTargetPlatformIdentifier(string targetFramework) Elemezze a TargetPlatformIdentifiert a TargetFrameworkből.
GetTargetPlatformVersion(string targetFramework, int versionPartCount) A TargetPlatformVersion kibontása a TargetFrameworkből.
IsTargetFrameworkCompatible(string targetFrameworkTarget, string targetFrameworkCandidate) Igaz értéket ad vissza, ha a jelölt cél-keretrendszer (második argumentum) kompatibilis az első argumentumban megjelölt cél-keretrendszerrel, és máskülönben hamis.

A versionPartCount paraméter GetTargetFrameworkVersionGetTargetPlatformVersion alapértelmezett értéke 2.

Az alábbi példa bemutatja, hogyan használják ezeket a függvényeket.

<Project>

    <PropertyGroup>
        <Value1>$([MSBuild]::GetTargetFrameworkIdentifier('net5.0-windows7.0'))</Value1>
        <Value2>$([MSBuild]::GetTargetFrameworkVersion('net5.0-windows7.0'))</Value2>
        <Value3>$([MSBuild]::GetTargetPlatformIdentifier('net5.0-windows7.0'))</Value3>
        <Value4>$([MSBuild]::GetTargetPlatformVersion('net5.0-windows7.0'))</Value4>
        <Value5>$([MSBuild]::IsTargetFrameworkCompatible('net5.0-windows', 'net5.0'))</Value5>
        <Value6>$([MSBuild]::IsTargetFrameworkCompatible('net5.0', 'net6.0'))</Value6>
        <Value7>$([MSBuild]::IsTargetFrameworkCompatible('net5.0', 'net8.0'))</Value7>
        <Value8>$([MSBuild]::IsTargetFrameworkCompatible('net8.0', 'net6.0'))</Value8>
    </PropertyGroup>

    <Target Name="MyTarget">
        <Message Text="Value1 = $(Value1)" />
        <Message Text="Value2 = $(Value2)" />
        <Message Text="Value3 = $(Value3)" />
        <Message Text="Value4 = $(Value4)" />
        <Message Text="Value5 = $(Value5)" />
        <Message Text="Value6 = $(Value6)" />
        <Message Text="Value7 = $(Value7)" />
        <Message Text="Value8 = $(Value8)" />
    </Target>
</Project>
Value1 = .NETCoreApp
Value2 = 5.0
Value3 = windows
Value4 = 7.0
Value5 = True
Value6 = False
Value7 = False
Value8 = True

MSBuild FilterTargetFrameworks

Az MSBuild 17.6-os és újabb verzióival (vagy .NET 7-esek és újabb verziók) ezzel a tulajdonságfüggvényrel kiválaszthatja a cél-keretrendszer-monikerek (TFM-ek) listájának egy részhalmazát, hogy a listát azokra a keretrendszerekre korlátozza, amelyek megfelelnek a szűrőargumentumban megadott TFM-ek listájának.

Például, ha incomingnet6.0;net7.0;netstandard2.0 és filternet7.0;netstandard2.0, az eredmény net7.0;netstandard2.0.

MSBuild verzió-összehasonlító függvények

Az MSBuild 16.5-ös és újabb verziói számos függvényt definiálnak a verziókat ábrázoló sztringek összehasonlításához.

Megjegyzés:

A feltételek összehasonlító operátorai összehasonlíthatják az objektumként System.Version elemezhető sztringeket, de az összehasonlítás váratlan eredményeket eredményezhet. Előnyben részesítsd a tulajdonságfüggvényeket.

Függvény szignatúra Leírás
VersionEquals(string a, string b) Adja vissza true , ha a verziók ab megegyeznek az alábbi szabályok szerint.
VersionGreaterThan(string a, string b) Adja vissza true , ha a verzió a nagyobb, mint b az alábbi szabályok szerint.
VersionGreaterThanOrEquals(string a, string b) Adja vissza true , ha a verzió a nagyobb vagy egyenlő b az alábbi szabályok szerint.
VersionLessThan(string a, string b) Adja vissza true , ha a verzió a kisebb, mint b az alábbi szabályok szerint.
VersionLessThanOrEquals(string a, string b) Akkor adja vissza true , ha a verzió a kisebb vagy egyenlő b az alábbi szabályok szerint.
VersionNotEquals(string a, string b) Adja vissza false , ha a verziók ab megegyeznek az alábbi szabályok szerint.

Ezekben a metódusokban a verziók a következőképpen vannak elemezve System.Version, a következő kivételekkel:

  • A v vagy V figyelmen kívül hagyása lehetővé teszi az összehasonlítást a $(TargetFrameworkVersion)-vel.

  • A rendszer a verziósztring első "-" vagy "+" végétől a végéig mindent figyelmen kívül hagy. Ez lehetővé teszi a szemantikus verziók (semver) átadását, bár a sorrend nem ugyanaz, mint a semver-ben. Ehelyett az előzetes verzió-jelölők és a metaadatok nem rendelkeznek semmilyen rendezési súllyal. Ez hasznos lehet például egy funkció >= x.y bekapcsolásához és aktiválódásához x.y.z-pre.

  • A meghatározatlan részek megegyeznek a nulla értékű részekkel. (x == x.0 == x.0.0 == x.0.0.0).

  • A szóköz nem engedélyezett egész számösszetevőkben.

  • Csak a főverzió érvényes (3 egyenlő 3.0.0.0)

  • + nem használható pozitív előjelként egész számok esetén (a rendszer semver metaadatként kezeli, és figyelmen kívül hagyja)

Jótanács

A TargetFramework tulajdonságainak összehasonlítása általában az IsTargetFrameworkCompatible függvényt használja a verziók kinyerése és összehasonlítása helyett. Ez lehetővé teszi a TargetFramework tekintetében és verzióban különböző TargetFrameworkIdentifier-ek összehasonlítását.

MSBuild feltételfüggvények

A függvények Exists és HasTrailingSlash nem tulajdonságfüggvények. Az attribútummal Condition használhatóak. Lásd: MSBuild feltételek.