Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A tulajdonságok név-érték párok, amelyek a buildek konfigurálásához használhatók. A tulajdonságok hasznosak az értékek tevékenységeknek való átadásához, a feltételek kiértékeléséhez és a projektfájlban hivatkozott értékek tárolásához.
Tulajdonságok definiálása és hivatkozása egy projektfájlban
A tulajdonságokat úgy deklarálja a rendszer, hogy létrehoz egy olyan elemet, amely a tulajdonság nevét egy PropertyGroup elem gyermekeként adja meg. Az alábbi XML például létrehoz egy olyan tulajdonságot BuildDir , amelynek értéke a következő Build.
<PropertyGroup>
<BuildDir>Build</BuildDir>
</PropertyGroup>
Az érvényes tulajdonságnevek nagybetűvel vagy kisbetűs ASCII-betűvel vagy aláhúzásjellel kezdődnek(_); az érvényes további karakterek közé tartoznak az alfanumerikus karakterek (ASCII-betűk vagy számjegyek), az aláhúzásjel és a kötőjel (-).
A projektfájlban a tulajdonságokra a szintaxis $(<PropertyName>)hivatkozik. Az előző példában szereplő tulajdonságra például a rendszer a használatával $(BuildDir)hivatkozik.
A tulajdonságértékek a tulajdonság újradefiniálásával módosíthatók. A BuildDir tulajdonság az alábbi XML-fájl használatával adható meg új értékként:
<PropertyGroup>
<BuildDir>Alternate</BuildDir>
</PropertyGroup>
A tulajdonságok kiértékelése abban a sorrendben történik, amelyben azok megjelennek a projektfájlban. Az új értéket a régi érték BuildDir hozzárendelése után kell deklarálni.
Fenntartott tulajdonságok
Az MSBuild fenntart néhány tulajdonságnevet a projektfájlra és az MSBuild bináris fájlokra vonatkozó információk tárolásához. Ezekre a tulajdonságokra a $ jelöléssel hivatkozunk, ugyanúgy, mint bármely más tulajdonságra. A $(MSBuildProjectFile) például a projektfájl teljes fájlnevét adja vissza, beleértve a fájlnévkiterjesztést is.
További információért lásd: Útmutató: Hivatkozás a projektfájl nevére vagy helyére és MSBuild fenntartott és jól ismert tulajdonságok.
MSBuild belső tulajdonságok
Az aláhúzásjellel (_) kezdődő standard importálási fájlokban definiált tulajdonságok privátak az MSBuild számára, és nem olvashatók, nem állíthatók alaphelyzetbe vagy felülbírálhatók a felhasználói kódban.
Környezeti tulajdonságok
A projektfájlok környezeti változóira ugyanúgy hivatkozhat, mint a fenntartott tulajdonságokra. Ha például a környezeti változót szeretné használni a projektfájlban, használja a PATH $(Path) függvényt. Ha a projekt olyan tulajdonságdefiníciót tartalmaz, amelynek neve megegyezik egy környezeti tulajdonság nevével, a projekt tulajdonsága felülírja a környezeti változó értékét.
Minden MSBuild-projektnek elkülönített környezeti blokkja van: csak olvasásokat és írásokat lát a saját blokkjában. Az MSBuild csak akkor olvassa be a környezeti változókat, ha inicializálja a tulajdonsággyűjteményt a projektfájl kiértékelése vagy létrehozása előtt. Ezután a környezeti tulajdonságok statikusak, vagyis minden ívott eszköz ugyanazokkal a névvel és értékekkel kezdődik.
A környezeti változók aktuális értékének lekéréséhez használja a System.Environment.GetEnvironmentVariable tulajdonságfüggvényeket . Az előnyben részesített módszer azonban a tevékenységparaméter EnvironmentVariableshasználata. Az ebben a sztringtömbben beállított környezeti tulajdonságok a rendszer környezeti változóinak befolyásolása nélkül továbbíthatók az ívott eszköznek.
Jótanács
A rendszer nem minden környezeti változót olvas be, hogy kezdeti tulajdonságokká váljon. A rendszer figyelmen kívül hagyja azokat a környezeti változókat, amelyek neve nem érvényes MSBuild tulajdonságnév, például "386".
További információért lásd: Hogyan: Környezeti változók használata a build során.
Beállításjegyzék tulajdonságai
A rendszerregisztrációs adatbázis értékeit a következő szintaxissal olvashatja el, ahol Hive a beállításjegyzék-hive (például HKEY_LOCAL_MACHINE) MyKey a kulcs neve, MySubKey az alkulcs neve és Value az alkulcs értéke.
$(registry:Hive\MyKey\MySubKey@Value)
Az alapértelmezett alkulcsérték lekéréséhez hagyja ki a Value.
$(registry:Hive\MyKey\MySubKey)
Ez a beállításjegyzék-érték egy buildtulajdonság inicializálására használható. Ha például létre szeretne hozni egy buildtulajdonságot, amely a Visual Studio webböngésző kezdőlapját jelöli, használja a következő kódot:
<PropertyGroup>
<VisualStudioWebBrowserHomePage>
$(registry:HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\14.0\WebBrowser@HomePage)
</VisualStudioWebBrowserHomePage>
<PropertyGroup>
Figyelmeztetés
Az MSBuild (dotnet build) .NET SDK-verziójában a beállításjegyzék tulajdonságai nem támogatottak.
Tulajdonságok létrehozása a végrehajtás során
A külső Target elemekhez rendelt tulajdonságok a build kiértékelési fázisában vannak hozzárendelve. A következő végrehajtási fázisban a tulajdonságok az alábbiak szerint hozhatók létre vagy módosíthatók:
Bármely tevékenység kibocsáthat egy tulajdonságot. Tulajdonság kibocsátásához a Tevékenység elemnek rendelkeznie kell egy attribútummal rendelkező gyermek
PropertyNameelemmel.A CreateProperty tevékenység kibocsáthat egy tulajdonságot. Ez a használat elavult.
Targetaz elemek tartalmazhatnakPropertyGroupolyan elemeket, amelyek tulajdonságdeklarációkat tartalmazhatnak.
Globális tulajdonságok
Az MSBuild lehetővé teszi tulajdonságok beállítását a parancssorban a -property (vagy -p) kapcsolóval. Ezek a globális tulajdonságértékek felülírják a projektfájlban beállított tulajdonságértékeket. Ez magában foglalja a környezeti tulajdonságokat, de nem tartalmaz fenntartott tulajdonságokat, amelyek nem módosíthatók.
Az alábbi példa a globális Configuration tulajdonságot a következőre DEBUGállítja: .
msbuild.exe MyProj.proj -p:Configuration=DEBUG
A globális tulajdonságok a többprojektes buildben lévő gyermekprojektekhez is beállíthatók vagy módosíthatók az Properties MSBuild feladat attribútumával. A rendszer a globális tulajdonságokat gyermekprojektekbe is továbbítja, kivéve, ha az RemoveProperties MSBuild feladat attribútuma a nem továbbítandó tulajdonságok listájának megadására szolgál. További információ: MSBuild feladat.
Helyi tulajdonságok
A helyi tulajdonságok alaphelyzetbe állíthatók egy projektben. A globális tulajdonságok nem. Ha egy helyi tulajdonság a parancssorból van beállítva a -p beállítással, a projektfájlban lévő beállítás elsőbbséget élvez a parancssorral szemben.
Egy helyi tulajdonságot a projektcímkében lévő attribútum használatával TreatAsLocalProperty adhat meg.
A következő kód azt határozza meg, hogy két tulajdonság helyi:
<Project Sdk="Microsoft.Net.Sdk" TreatAsLocalProperty="Prop1;Prop2">
A rendszer nem továbbítja a helyi tulajdonságokat a többprojektes buildben lévő gyermekprojektek számára. Ha megad egy értéket a parancssorban a -p beállítással, a gyermekprojektek a szülőprojektben módosított helyi érték helyett a globális tulajdonság értékét kapják meg, de a gyermekprojekt (vagy annak bármely importálása) a sajátjával TreatAsLocalPropertyis módosíthatja.
Példa helyi tulajdonságokkal
Az alábbi példakód a következő hatásokat TreatAsLocalPropertymutatja be:
<!-- 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>
Tegyük fel, hogy létrehoz egy test1.proj parancssort, és megadja TreatedAsLocalProperty a globális értéket GlobalOverrideValue:
dotnet msbuild .\test1.proj -p:TreatedAsLocalProp=GlobalOverrideValue
A kimenet a következő:
test1.proj(11,9): warning : TreatedAsLocalProp(test): LocalOverrideValue
test2.proj(3,9): warning : TreatedAsLocalProp(test2): GlobalOverrideValue
A gyermekprojekt örökli a globális értéket, de a szülőprojekt a helyileg beállított tulajdonságot használja.
Helyi tulajdonságok és importálás
Ha TreatAsLocalProperty attribútumot használ az importált projekthez, a sorrend fontos, ha figyelembe veszi, hogy a tulajdonság milyen értéket kap.
Az alábbi példakód egy importált projektre gyakorolt hatását TreatAsLocalProperty mutatja be:
<!-- 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>
Tegyük fel, hogy az alábbiak szerint importer.proj hoz létre TreatedAsLocalProp és állít be egy globális értéket:
dotnet msbuild .\importer.proj -p:TreatedAsLocalProp=GlobalOverrideValue
A kimenet a következő:
importer.proj(9,9): warning : TreatedAsLocalProp(importer.proj): ImportOverrideValue
Tegyük fel, hogy a tulajdonsággal TrySecondOverride a következőre trueépít:
dotnet msbuild .\importer.proj -p:TreatedAsLocalProp=GlobalOverrideValue -p:TrySecondOverride=true
A kimenet a következő:
importer.proj(13,9): warning : TreatedAsLocalProp(importer.proj): SecondOverrideValue
A példa azt mutatja, hogy a tulajdonság az importált projekt után helyiként lesz kezelve, ahol az TreatAsLocalProperty attribútumot használták, nem csak az importált fájlban. A tulajdonság értékét a globális felülbírálási érték befolyásolja, de csak a használt importált projekt TreatAsLocalProperty.
További információ: Project elem (MSBuild) és Útmutató: Azonos forrásfájlok létrehozása különböző beállításokkal.
Tulajdonság funkciók
A .NET-keretrendszer 4-es verziójától kezdve tulajdonságfüggvényekkel értékelheti ki az MSBuild-szkripteket. Az MSBuild-feladatok használata nélkül elolvashatja a rendszeridőt, összehasonlíthatja a sztringeket, megfeleltetheti a normál kifejezéseket, és számos más műveletet hajthat végre a buildelési szkriptben.
A sztring (példány) metódusokkal bármilyen tulajdonságértéken működhet, és számos rendszerosztály statikus metódusait hívhatja meg. A buildtulajdonságokat például az alábbiak szerint állíthatja be a mai dátumra.
<Today>$([System.DateTime]::Now.ToString("yyyy.MM.dd"))</Today>
További információ és a tulajdonságfüggvények listája: Tulajdonságfüggvények.
XML tárolása tulajdonságokban
A tulajdonságok tetszőleges XML-fájlokat tartalmazhatnak, amelyek segíthetnek az értékek feladatoknak való átadásában vagy a naplózási információk megjelenítésében. Az alábbi példa a ConfigTemplate tulajdonságot mutatja be, amely XML- és egyéb tulajdonsághivatkozásokat tartalmazó értékkel rendelkezik. Az MSBuild a tulajdonsághivatkozásokat a megfelelő tulajdonságértékek használatával cseréli le. A tulajdonságértékek abban a sorrendben vannak hozzárendelve, amelyben megjelennek. Ezért ebben a példában$(MySupportedVersion)$(MyRequiredVersion), és $(MySafeMode) már meg kellett volna határozni.
<PropertyGroup>
<ConfigTemplate>
<Configuration>
<Startup>
<SupportedRuntime
ImageVersion="$(MySupportedVersion)"
Version="$(MySupportedVersion)"/>
<RequiredRuntime
ImageVersion="$(MyRequiredVersion)"
Version="$(MyRequiredVersion)"
SafeMode="$(MySafeMode)"/>
</Startup>
</Configuration>
</ConfigTemplate>
</PropertyGroup>