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.
Az MSBuild növekményes buildek olyan buildek, amelyek úgy vannak optimalizálva, hogy azokat a célokat, amelyek kimeneti fájljai up-todátummal rendelkeznek a megfelelő bemeneti fájlokra vonatkozóan, ne hajtsák végre.
A célelem rendelkezhet egy Inputs attribútummal is, amely azt jelzi, hogy a cél milyen elemeket vár bemenetként, valamint egy Outputs attribútumot, amely azt jelzi, hogy milyen elemeket állít elő kimenetként. Az MSBuild megkísérli megkeresni az attribútumok értékei közötti egy-az-egyhez megfeleltetést. Ha létezik ilyen leképezés, az MSBuild minden bemeneti elem időbélyegét összehasonlítja a megfelelő kimeneti elem időbélyegével. Az egy-az-egyhez leképezéssel nem rendelkező kimeneti fájlokat a rendszer az összes bemeneti fájlhoz hasonlítja. Az elemek akkor tekinthetők up-todátumnak, ha a kimeneti fájl ugyanolyan korú vagy újabb, mint a bemeneti fájl vagy fájlok.
Jegyzet
Amikor az MSBuild kiértékeli a bemeneti fájlokat, a rendszer csak a lista tartalmát veszi figyelembe az aktuális végrehajtás során. Az utolsó build lista módosításai nem teszik automatikusan elavulttá a célt.
Ha az összes kimeneti elem up-to-date, az MSBuild kihagyja a célértéket. Ez a cél-növekményes összeállítás jelentősen javíthatja az összeállítás sebességét. Ha csak néhány fájl up-to-date, az MSBuild végrehajtja a célértéket, de kihagyja a up-to-date elemeket, ezért az összes elemet up-to-date fájlba helyezi. Ez a folyamat részleges növekményes buildelésinéven ismert.
Az egy-az-egyhez leképezések csak úgy hozhatók létre, ha a Outputs attribútumot a Inputs attribútum átalakításával készíti el. További információért tekintse meg a MSBuild transzformációkat.
Vegye figyelembe a következő célt:
<Target Name="Backup" Inputs="@(Compile)"
Outputs="@(Compile->'$(BackupFolder)%(Identity).bak')">
<Copy SourceFiles="@(Compile)" DestinationFiles=
"@(Compile->'$(BackupFolder)%(Identity).bak')" />
</Target>
A Compile elemtípus által képviselt fájlok egy biztonsági mentési könyvtárba lesznek másolva. A biztonsági mentési fájlok .bak fájlnévkiterjesztéssel rendelkeznek. Ha a Compile elemtípus vagy a megfelelő biztonsági mentési fájlok által képviselt fájlok nem törlődnek vagy módosulnak az Backup cél futtatása után, akkor a Backup cél ki lesz hagyva a későbbi buildekben.
Kimeneti következtetés
Az MSBuild összehasonlítja a cél Inputs és Outputs attribútumait annak megállapításához, hogy a célnak végre kell-e hajtania. Ideális esetben a növekményes build befejezése után létező fájloknak változatlannak kell maradniuk, függetlenül attól, hogy a társított célokat végrehajtják-e. Mivel a tevékenységek által létrehozott vagy módosított tulajdonságok és elemek hatással lehetnek a buildre, az MSBuildnek akkor is ki kell következnie az értékeiből, ha az őket érintő cél ki van hagyva. Ez a folyamat kimeneti következtetésinéven ismert.
Három eset létezik:
A cél rendelkezik egy
Conditionattribútummal, amelynek az értékefalse. Ebben az esetben a cél nem fut, és nincs hatással a buildre.A cél elavult kimenetekkel rendelkezik, és futtatva up-to-date értékre.
A cél nem rendelkezik elavult kimenetekkel, ezért a rendszer kihagyja. Az MSBuild kiértékeli a célt, és úgy módosítja az elemeket és tulajdonságokat, mintha a cél futott volna.
A növekményes fordítás támogatásához a feladatoknak gondoskodniuk kell arról, hogy az TaskParameter elem Output attribútuma megegyezzen a feladat bemeneti paraméterével. Például:
<CreateProperty Value="123">
<Output PropertyName="Easy" TaskParameter="Value" />
</CreateProperty>
Ez a kód létrehozza a Easytulajdonságot, amelynek értéke 123, függetlenül attól, hogy a cél végrehajtásra kerül vagy átugrásra kerül.
A kimeneti következtetés automatikusan megtörténik egy cél elem- és tulajdonságcsoportján.
CreateItem feladatokra nincs szükség a célok között, ezért célszerű elkerülni. Emellett a CreateProperty feladatokat csak egy célban a cél végrehajtásának ellenőrzésére kell használni.
Annak meghatározása, hogy egy cél fut-e
A kimeneti következtetés miatt meg kell vizsgálnia a cél tulajdonságait és elemeit annak megállapításához, hogy a cél végrehajtása megtörtént-e. Ehhez adja hozzá a CreateProperty feladatot a célhoz, és adjon neki egy Output elemet, amelynek TaskParameterValueSetByTask. Például:
<CreateProperty Value="true">
<Output TaskParameter="ValueSetByTask" PropertyName="CompileRan" />
</CreateProperty>
Ez a kód létrehozza a tulajdonságot CompileRan, és megadja a trueértéket, de csak akkor, ha a cél végrehajtása történik. Ha a cél ki van hagyva, CompileRan nem jön létre.