MSBuild
A Microsoft Build Engine egy alkalmazások készítésére szolgáló platform. Ez a motor, más néven MSBuild, egy XML-sémát biztosít egy projektfájlhoz, amely szabályozza, hogy a buildplatform hogyan dolgozza fel és hozza létre a szoftvereket. A Visual Studio az MSBuildet használja, de az MSBuild nem függ a Visual Studiótól. Ha a msbuild.exe vagy a dotnet build parancsot futtatja a projekt- vagy megoldásfájlán, olyan környezetekben vezényelheti és hozhatja létre a termékeket, ahol nincs telepítve a Visual Studio.
A Visual Studio az MSBuild használatával tölt be és hoz létre felügyelt projekteket. A Visual Studio projektfájljai (.csproj, .vbproj, .vcxprojstb.) MSBuild XML-kódot tartalmaznak, amely a projekt IDE-ben való létrehozásakor fut. A Visual Studio-projektek importálják az összes szükséges beállítást és folyamatokat a tipikus fejlesztési munkához, de kiterjesztheti vagy módosíthatja őket a Visual Studióban vagy egy szövegszerkesztő használatával.
Ha olyan Windows rendszeren szeretné telepíteni az MSBuild-et, amely nem rendelkezik Visual Studióval, akkor keresse fel a letöltési oldalontalálható Build Tools for Visual Studio részt. Az MSBuild telepítése ezzel a módszerrel biztosítja a(z) MSBuild.exe.
A .NET Core és a .NET 5 vagy újabb verziók esetében az MSBuild-nek megfelelő másik módszer a .NET SDKtelepítése. A .NET build parancs dotnet build
a .NET SDK-val érhető el macOS, Windows vagy Linux rendszeren. A .NET build parancs dotnet build
egy vékony réteg a MSBuild.exe.NET Core-verzió fölött. Az MSBuildet használó .NET Core parancssori felület (CLI)segítségével olyan projekteket hozhat létre, amelyek a .NET Core-t és a .NET 5-öt vagy újabb verziót célják.
A Visual Studio 2022-től kezdve a Visual Studióban való buildeléskor az MSBuild 64 bites verziója lesz használatban.
További információ a C++-hoz készült MSBuildről: MSBuild (C++).
Az alábbi példák azt szemléltetik, hogy mikor futtathat buildeket úgy, hogy az MSBuild parancsot a parancssorból inváltja a Visual Studio IDE helyett.
A Visual Studio nincs telepítve.
Az MSBuild 64 bites verzióját szeretné használni, és a Visual Studio 2019-es vagy korábbi verzióját használja. Az MSBuild ezen verziója általában szükségtelen, de lehetővé teszi, hogy az MSBuild több memóriához férhessen hozzá.
Több folyamatban szeretne buildet futtatni. Az IDE használatával azonban ugyanezt az eredményt érheti el a C++ és a C# rendszerű projekteken is.
Módosítani szeretné a buildrendszert. Például engedélyezni szeretné a következő műveleteket:
Dolgozza fel a fájlokat, mielőtt elérnék a fordítóprogramot.
Másolja a buildkimeneteket egy másik helyre.
Tömörített fájlok létrehozása buildkimenetekből.
Végezzen utófeldolgozási lépést. Előfordulhat például, hogy egy szerelvényt másik verzióra szeretne bélyegezni.
Kódot írhat a Visual Studio IDE-ben, de futtathat buildeket az MSBuild használatával. Másik lehetőségként létrehozhat kódot az IDE-ben egy fejlesztői számítógépen, de futtathatja az MSBuild parancsot a parancssorból egy forrásadattárból integrált kód létrehozásához több fejlesztő együttműködésével.
Jegyzet
Az Azure Pipelines használatával automatikusan lefordíthatja, tesztelheti és üzembe helyezheti az alkalmazást. A buildelési rendszer automatikusan futtathat buildeket, amikor a fejlesztők bejelentkeznek a kódba (például egy folyamatos integrációs stratégia részeként), vagy ütemezés szerint (például egy éjszakai buildellenőrzési teszt buildjeként). Az Azure Pipelines az MSBuild használatával fordítja le a kódot. További információ: Azure Pipelines.
Az MSBuild windowsos bevezető oktatóanyagát a útmutatóban találja: Az MSBuildhasználata.
Az MSBuild használata parancssorban
Az MSBuild parancssorban való futtatásához adjon át egy projektfájlt MSBuild.exe, a megfelelő parancssori beállításokkal együtt. A parancssori beállítások lehetővé teszik tulajdonságok beállítását, meghatározott célok végrehajtását és a buildelési folyamatot vezérlő egyéb beállítások beállítását. A következő parancssori szintaxist használná például a MyProj.proj fájl létrehozásához, a Configuration
tulajdonságot Debug
értékre állítva.
MSBuild.exe MyProj.proj -property:Configuration=Debug
Az MSBuild nem módosítja a viselkedését a fájlkiterjesztés alapján, de a konvenció az, hogy a fő MSBuild bemeneti fájlhoz proj
végződő bővítményeket (például .csproj
, .vcxproj
vagy .vbproj
) használjon a fő MSBuild bemeneti fájlhoz, az úgynevezett "projektfájlhoz".
További információ az MSBuild parancssori beállításairól: parancssori referencia.
Fontos
A projekt letöltése előtt határozza meg a kód megbízhatóságát.
A .NET Core és a .NET 5 vagy újabb verziók esetében általában dotnet build
használatával hívja meg az MSBuildet. Nézd a(z) dotnet build. Ha csak a .NET SDK-t telepíti, és nem a Visual Studiót vagy a Visual Studio Build Tools-t, akkor az MSBuild-et csak a dotnet build
-n keresztül érheti el.
A parancssori dotnet build --help
a dotnet build
jellemző parancssori beállításokat sorolja fel, nem az MSBuild.exeösszes beállítását, de továbbra is használhatja az MSBuild parancssori referenciában felsorolt összes parancssori lehetőséget. A dotnet build
által nem feldolgozott beállítások az MSBuildnek lesznek átadva.
Projektfájl
Az MSBuild egyszerű és bővíthető XML-alapú projektfájlformátumot használ. Az MSBuild projektfájl formátuma lehetővé teszi a fejlesztők számára, hogy leírják a létrehozandó elemeket, és azt is, hogyan kell őket különböző operációs rendszerekhez és konfigurációkhoz összeállítani. Emellett a projektfájlformátum lehetővé teszi a fejlesztők számára, hogy újrahasználható buildszabályokat hozzanak létre, amelyek külön fájlokba vannak osztva, hogy a buildek következetesen végrehajthatók legyenek a termék különböző projektjeiben.
A Visual Studio buildrendszere magában a projektfájlban tárolja a projektspecifikus logikát, és importált MSBuild XML-fájlokat használ olyan bővítményekkel, mint a .props
és a .targets
a standard buildlogika meghatározásához. A .props
fájlok definiálják az MSBuild tulajdonságokat, és .targets
fájlok határozzák meg az MSBuild-célokat. Ezek az importálások néha láthatók a Visual Studio projektfájljában, de az újabb projektekben, például a .NET Core- és a .NET 5-ös és a .NET 6-projektekben nem látja az importálásokat a projektfájlban; ehelyett egy SDK-referencia jelenik meg, amely így néz ki:
<Project Sdk="Microsoft.Net.Sdk">
Ezeket SDK-stílusú projekteknek nevezzük. Amikor egy SDK-ra, például a .NET SDK-ra hivatkozik, az SDK implicit módon határozza meg a .props
és .target
fájlok importálását.
Az alábbi szakaszok az MSBuild projektfájlformátum néhány alapvető elemét ismertetik. Az alapszintű projektfájl létrehozásáról szóló oktatóanyagért tekintse meg útmutatót: MSBuild projektfájl létrehozása az alapoktól.
Tulajdonságok
A tulajdonságok a buildek konfigurálásához használható kulcs-érték párokat jelölik. 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 kód például létrehoz egy BuildDir
nevű tulajdonságot, amely Build
értékkel rendelkezik.
<PropertyGroup>
<BuildDir>Build</BuildDir>
</PropertyGroup>
A tulajdonság feltételes meghatározásához helyezzen el egy Condition
attribútumot az elemben. A feltételes elemek tartalmát a rendszer figyelmen kívül hagyja, amíg a feltétel kiértékelése nem ad eredményt true
. Az alábbi példában a Configuration
tulajdonság akkor van definiálva, ha még nincs definiálva.
<Configuration Condition=" '$(Configuration)' == '' ">DefaultValue</Configuration>
A tulajdonságok a projektfájlban a $(<PropertyName>) szintaxissal hivatkozhatók. Hivatkozhat például az előző példák tulajdonságaira $(BuildDir)
és $(Configuration)
használatával.
További információ a tulajdonságokról: MSBuild tulajdonságok.
Elemek
Az elemek bemenetek a buildelési rendszerbe, és általában a fájlokat jelölik. Az elemek elemtípusokba vannak csoportosítva a felhasználó által definiált elemnevek alapján. Ezek az elemtípusok használhatók paraméterekként a tevékenységekhez, amelyek az egyes elemeket használják a buildelési folyamat lépéseinek végrehajtásához.
Az elemek a projektfájlban deklarálhatók úgy, hogy létrehoznak egy olyan elemet, amelynek neve egy ItemGroup elem gyermekeként szerepel. A következő kód például létrehoz egy Compile
nevű elemtípust, amely két fájlt tartalmaz.
<ItemGroup>
<Compile Include = "file1.cs"/>
<Compile Include = "file2.cs"/>
</ItemGroup>
Az elemtípusok a projektfájlban a @(<ItemType>) szintaxissal hivatkozhatók. A példában szereplő elemtípusra például a @(Compile)
használatával hivatkozhat.
Az MSBuildben az elem- és attribútumnevek megkülönböztetik a kis- és nagybetűket. A tulajdonság-, elem- és metaadatnevek azonban nem. Az alábbi példa létrehozza az elemtípust Compile
, comPile
vagy bármilyen más esetváltozatot, és az elemtípusnak az "one.cs;two.cs" értéket adja.
<ItemGroup>
<Compile Include="one.cs" />
<Compile Include="two.cs" />
</ItemGroup>
Az elemek helyettesítő karakterek használatával deklarálhatók, és további metaadatokat is tartalmazhatnak a fejlettebb buildelési forgatókönyvekhez. További információ az elemekről: Elemek.
Feladatok
A feladatok végrehajtható kódegységek, amelyeket az MSBuild-projektek a buildelési műveletek végrehajtásához használnak. Előfordulhat például, hogy egy feladat bemeneti fájlokat fordít le, vagy külső eszközt futtat. A feladatok újra felhasználhatók, és különböző projektek különböző fejlesztői oszthatják meg őket.
A feladat végrehajtási logikája felügyelt kódban van megírva, és az MSBuildre van leképezve a UsingTask elem használatával. Saját feladatot írhat egy felügyelt típus megírásával, amely implementálja a ITask felületet. A tevékenységek írásáról további információt Tevékenységírásicímű témakörben talál.
Az MSBuild olyan gyakori feladatokat tartalmaz, amelyeket a követelményeknek megfelelően módosíthat. Ilyenek például a Copy, amely fájlokat másol, a MakeDir, amely könyvtárakat hoz létre, valamint a Csc, amely Visual C# forráskódfájlokat fordít. Az elérhető tevékenységek listáját a használati adatokkal együtt a Tevékenységre vonatkozó referenciacímű témakörben találja.
A rendszer egy MSBuild projektfájlban hajt végre egy tevékenységet egy olyan elem létrehozásával, amely a feladat nevét egy Cél elem gyermekeként tartalmazza. A tevékenységek általában elfogadják az elem attribútumaként átadott paramétereket. Az MSBuild tulajdonság és az elemek is használhatók paraméterekként. Az alábbi kód például meghívja a MakeDir feladatot, és átadja neki a korábbi példában deklarált BuildDir
tulajdonság értékét.
<Target Name="MakeBuildDirectory">
<MakeDir Directories="$(BuildDir)" />
</Target>
A tevékenységekről további információt Tevékenységekcímű témakörben talál.
Célok
Egy adott sorrendben csoportosítja a tevékenységeket, és a projektfájl szakaszait teszi elérhetővé belépési pontokként a buildelési folyamathoz. A célokat gyakran logikai szakaszokba csoportosítják az olvashatóság növelése és a bővítés lehetővé tétele érdekében. A buildelési lépések célokra való feltörésével meghívhatja a buildelési folyamat egy részét más célokból anélkül, hogy a kód ezen szakaszát minden célba másolta. Ha például a buildelési folyamat több belépési pontja is hivatkozásokat igényel, létrehozhat egy célhelyet, amely hivatkozásokat hoz létre, majd minden olyan belépési pontból futtathatja a célhelyet, ahol szükség van rá.
A célok deklarálása a projektfájlban a Cél elem használatával történik. A következő kód például létrehoz egy Compile
nevű célt, amely meghívja a Csc feladatot, amely a korábbi példában deklarált elemlistát tartalmazza.
<Target Name="Compile">
<Csc Sources="@(Compile)" />
</Target>
Speciálisabb forgatókönyvekben a célok segítségével leírhatók a kapcsolatok egymás között, és függőségelemzést végezhetnek, így a buildelési folyamat teljes szakaszai kihagyhatók, ha a cél dátum up-to. További információ a célokról: Célok.
Build naplók
A buildelési hibákat, figyelmeztetéseket és üzeneteket naplózhatja a konzolra vagy egy másik kimeneti eszközre. További információkért lásd: Buildnaplók beszerzése az MSBuild segítségével.
Az MSBuild használata a Visual Studióban
A Visual Studio az MSBuild projektfájlformátumot használja a felügyelt projektek buildadatainak tárolására. A Visual Studio felületével hozzáadott vagy módosított projektbeállítások megjelennek a .*proj fájlban, amely minden projekthez létre van hozva. A Visual Studio az MSBuild egy üzemeltetett példányát használja felügyelt projektek létrehozásához. Ez azt jelenti, hogy egy felügyelt projekt felépíthető a Visual Studióban vagy egy parancssorban (még akkor is, ha a Visual Studio nincs telepítve), és az eredmények azonosak lesznek.
Az MSBuild Visual Studióban való használatával kapcsolatos oktatóanyagért tekintse meg útmutatót: Az MSBuildhasználata.
Többcélú célzás
A Visual Studio használatával lefordíthat egy alkalmazást, hogy a .NET-keretrendszer vagy a .NET Core bármely verzióján fusson, beleértve a .NET 5-öt és újabb verziókat is. Lefordíthat például egy alkalmazást a .NET Framework 4 32 bites platformon való futtatásához, és fordíthatja le ugyanazt az alkalmazást úgy, hogy a .NET-keretrendszer 4.8-on fusson egy 64 bites platformon. A több keretrendszerre való fordítás képességét multitargetingnek nevezik.
A multitargeting néhány előnye:
Olyan alkalmazásokat fejleszthet, amelyek a .NET-keretrendszer korábbi verzióit célozzák meg, például a 3.5-ös és a 4.7.2-s verziót.
Megcélzhat egy keretrendszerprofilt, amely egy cél keretrendszer előre definiált részhalmaza.
Ha megjelent egy szervizcsomag a .NET-keretrendszer aktuális verziójához, megcélzhatja azt.
A multitargeting garantálja, hogy egy alkalmazás csak a cél keretrendszerben és platformon elérhető funkciókat használja.
További információ: Multitargeting.
A build testreszabása
Az MSBuild számos egyéni buildelési forgatókönyvhöz nyújt támogatást. A legtöbb beépített funkció felülírható vagy bővíthető. Lásd: az összeállítás testreszabása.
Az MSBuild programozott elérése
Ha buildelési eszközt fejleszt, érdemes lehet programozott módon meghívni az MSBuild alkalmazást egy .NET-alkalmazásból. Az MSBuild API használatával egy összetett buildrendszer minden aspektusát vezérelheti. Az MSBuild egy NuGet-csomagot biztosít egy teljes API-val (a Microsoft.Build névtérrel), amelyet .NET-alkalmazásból használhat ezen célokra. Lásd: Az MSBuild APIhasználata.
Az MSBuild nyílt forráskódú
Az MSBuild egy nyílt forráskódú projekt, amely elfogadja a felhasználói hozzájárulásokat a MSBuild GitHub-adattárban.
Lásd még:
Cím | Leírás |
---|---|
útmutató: MSBuild projektfájl létrehozása az alapoktól | Bemutatja, hogyan hozhat létre egyszerű projektfájlt növekményesen, csak szövegszerkesztő használatával. |
útmutató: Az MSBuild használata | Bemutatja az MSBuild építőelemeit, és megmutatja, hogyan írhat, módosíthat és hibakereshet az MSBuild-projektekben, a Visual Studio IDE bezárása nélkül. |
MSBuild-fogalmak | Az MSBuild négy építőelemét mutatja be: tulajdonságokat, elemeket, célokat és tevékenységeket. |
Elemek | Az MSBuild fájlformátum mögötti általános fogalmakat és a darabok egymáshoz igazítását ismerteti. |
MSBuild tulajdonságok | Tulajdonságokat és tulajdonságcsoportokat vezet be. A tulajdonságok kulcs-érték párok, amelyek a buildek konfigurálásához használhatók. |
Célok | Bemutatja, hogyan csoportosíthatja a feladatokat egy adott sorrendben, és hogyan engedélyezheti a buildelési folyamat szakaszainak meghívását a parancssorban. |
Tevékenységek | Bemutatja, hogyan hozhat létre egy végrehajtható kódegységet, amelyet az MSBuild az atomi buildelési műveletek végrehajtásához használhat. |
feltételek | A Condition attribútum MSBuild elemben való használatát ismerteti. |
Kötegelés | Ismerteti, hogy az MSBuild hogyan kategorizálja az elemlistákat metaadatok alapján a feladatok és célok végrehajtásához. |
Több célra irányuló | Bemutatja, hogyan célozhat meg több .NET-verziót és/vagy több platformot. |
Buildnaplók beszerzése | Ismerteti, hogyan naplózhatja a buildelési eseményeket, üzeneteket és hibákat. |
Hogyan fejleszti az MSBuild a projekteket | Az MSBuildben használt belső buildelési folyamatot ismerteti |
Egyéni feladat létrehozása kódgenerálási | Bemutatja, hogyan hozhat létre egyéni feladatot egy példakóddal. |
REST API-ügyfél létrehozása az MSBuild használatával | Bemutatja, hogyan bővíthető a build a REST API-ügyféllétrehozás kezelésére egy példakóddal. |
További erőforrások | Az MSBuild szolgáltatással kapcsolatos további információkért felsorolja a közösség és a támogatási erőforrások listáját. |
Hivatkozás
MSBuild hivatkozás
Hivatkozási információkat tartalmazó témakörökre mutató hivatkozások.szószedet
Általános MSBuild-kifejezéseket határoz meg.