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.
Megjegyzés
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 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.
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, .vcxprojvagy .vbproj) használjon a fő MSBuild bemeneti fájlhoz, az úgynevezett "projektfájlhoz".
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 buildjellemző 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:
XML
<ProjectSdk="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.
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.
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.
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.
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 Compilenevű elemtípust, amely két fájlt tartalmaz.
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, comPilevagy bármilyen más esetváltozatot, és az elemtípusnak az "one.cs;two.cs" értéket adja.
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.
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 Compilenevű célt, amely meghívja a Csc feladatot, amely a korábbi példában deklarált elemlistát tartalmazza.
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.
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.
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.
Bemutatja, hogyan csoportosíthatja a feladatokat egy adott sorrendben, és hogyan engedélyezheti a buildelési folyamat szakaszainak meghívását a parancssorban.
Ebből a képzési tervből megtudhatja, hogyan működhet együtt másokkal az Azure-folyamatokat és a GitHubot használó alkalmazások folyamatos létrehozásához, teszteléséhez és ellenőrzéséhez.
Ez a minősítés a következő technikai feladatok elvégzésének képességét méri: folyamatok és kommunikáció tervezése és megvalósítása, forráskövetési stratégia tervezése és implementálása, buildelési és kiadási folyamatok tervezése és megvalósítása, biztonsági és megfelelőségi terv kidolgozása és kialakítási stratégia megvalósítása.