Visual Studio-integráció (MSBuild)

A Visual Studio üzemelteti az MSBuildet felügyelt projektek betöltéséhez és létrehozásához. Mivel az MSBuild felelős a projektért, az MSBuild formátumú projektek szinte bármelyike sikeresen használható a Visual Studióban, még akkor is, ha a projektet egy másik eszköz hozta létre, és testre szabott buildelési folyamattal rendelkezik.

Ez a cikk a Visual Studio MSBuild-üzemeltetésének bizonyos aspektusait ismerteti, amelyeket figyelembe kell venni a Projektek és a .targets fájlok testreszabásakor, amelyeket be szeretne tölteni és létrehozni a Visual Studióban. Ezek segítenek biztosítani, hogy a Visual Studio olyan funkciói, mint az IntelliSense és a hibakeresés működjön az egyéni projektben.

A C++ projektekről további információt a Project-fájlokban talál.

Projektfájlnévkiterjesztések

MSBuild.exe felismeri a . *proj mintának megfelelő projektfájlnév-bővítményt. A Visual Studio azonban csak a projektfájlnévkiterjesztések egy részét ismeri fel, amely meghatározza a projektbe betöltendő nyelvspecifikus projektrendszert. A Visual Studio nem rendelkezik nyelvsemleges MSBuild-alapú projektrendszerrel.

A C# projektrendszer például betölti a .csproj fájlokat, de a Visual Studio nem tudja betölteni a .xxproj fájlokat. A forrásfájlok tetszőleges nyelvű projektfájljainak ugyanazt a bővítményt kell használniuk, mint a Visual Basic- vagy C#-projektfájloknak a Visual Studióban való betöltéséhez.

Másik lehetőségként a *.msbuildproj bővítmény is támogatott.

Jól ismert célnevek

A Visual Studióban a Build parancsra kattintva végrehajtja az alapértelmezett célt a projektben. Gyakran ezt a célt is nevezik Build. Ha az Újraépítés vagy a Tiszta parancsot választja, megkísérli végrehajtani a projektben az azonos nevű célt. A Közzététel gombra kattintva végrehajt egy, a projektben elnevezett PublishOnly célt.

Konfigurációk és platformok

Az MSBuild-projektekben a konfigurációkat attribútumot tartalmazó PropertyGroup elembe Condition csoportosított tulajdonságok jelölik. A Visual Studio ezeket a feltételeket vizsgálja meg a megjelenítendő projektkonfigurációk és platformok listájának létrehozásához. A lista sikeres kinyeréséhez a feltételeknek a következőhöz hasonló formátummal kell rendelkezniük:

Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "
Condition=" '$(Configuration)' == 'Release' " 
Condition=" '$(Something)|$(Configuration)|$(SomethingElse)' == 'xxx|Debug|yyy' "

A Visual Studio a PropertyGroup, ItemGroup, tulajdonság- és elem elemek feltételeit nézi át ebből a célból.

További buildelési műveletek

A Visual Studio lehetővé teszi egy projektben lévő fájl elemtípusának módosítását a Fájltulajdonságok ablak Build Action tulajdonságával. Fordítás, EmbeddedResource, tartalom, és Nincs elemtípus neve mindig megjelenik ebben a menüben, valamint a projektben már szereplő többi elemtípusnévvel együtt. Annak érdekében, hogy az egyéni elemtípusok neve mindig elérhető legyen ebben a menüben, hozzáadhatja a neveket egy elnevezett AvailableItemNameelemtípushoz. Ha például hozzáadja a következőt a projektfájlhoz, az egyéni JScript-típust hozzáadja ehhez a menühöz az összes olyan projekt esetében, amely importálja azt:

<ItemGroup>
    <AvailableItemName Include="JScript"/>
</ItemGroup>

Ha elemtípusneveket ad hozzá az AvailableItemName elemtípushoz, akkor az ilyen típusú elemek megjelennek a Megoldáskezelőben.

Megjegyzés:

Egyes elemtípusnevek a Visual Studióban speciálisak, de ebben a legördülő menüben nem szerepelnek.

Folyamatközi fordítók

Ha lehetséges, a Visual Studio megpróbálja a Visual Basic fordító folyamat közbeni verzióját használni a nagyobb teljesítmény érdekében. (A C#-ra nem alkalmazható.) Ahhoz, hogy ez megfelelően működjön, a következő feltételeknek kell teljesülnie:

  • A projekt céljaként a Visual Basic projektekben legyen egy Vbc nevű feladat.

  • A UseHostCompilerIfAvailable tevékenység paraméterét igaz értékre kell állítani.

Tervezési idő IntelliSense

Ahhoz, hogy intelliSense-támogatást kapjon a Visual Studióban, mielőtt egy build kimeneti szerelvényt hoz létre, a következő feltételeknek kell teljesülnie:

  • Léteznie kell egy Compile nevű célnak.

  • A Compile célnak vagy valamelyik függőségének meg kell hívnia a projekt fordítófeladatát, mint például a Csc vagy a Vbc.

  • Compile A célnak vagy annak egyik függőségének azt kell eredményeznie, hogy a fordító megkapja az IntelliSense összes szükséges paraméterét, különösen az összes hivatkozást.

  • A folyamatközi fordítók szakaszban felsorolt feltételeknek teljesülniük kell.

Megoldások létrehozása

A Visual Studióban a megoldásfájlt és a projekt buildrendezését maga a Visual Studio szabályozza. Amikor a msbuild.exe parancssori megoldásokkal dolgozik, az MSBuild elemzi a megoldásfájlt, és sorrendbe állítja a projektek buildjeit. Mindkét esetben a projektek külön-külön, függőségi sorrendben épülnek fel, és a projektek közötti hivatkozások nincsenek követve. Ezzel szemben, ha az egyes projektek msbuild.exe épülnek, a projekthivatkozások feldolgozásra kerülnek.

Amikor a Visual Studióban épít, a tulajdonság $(BuildingInsideVisualStudio) értéke true. Ez használható a projektben vagy a .targets fájlokban, hogy a build másképp viselkedjen.

Tulajdonságok és elemek megjelenítése

A Visual Studio felismer bizonyos tulajdonságneveket és értékeket. Egy projekt következő tulajdonsága például azt eredményezi, hogy a Windows-alkalmazás megjelenik a ProjekttervezőAlkalmazástípus mezőjében.

<OutputType>WinExe</OutputType>

A tulajdonság értéke szerkeszthető a Projekttervezőben , és menthető a projektfájlban. Ha egy ilyen tulajdonság kézi szerkesztéssel érvénytelen értéket kap, a Visual Studio figyelmeztetést jelenít meg a projekt betöltésekor, és az érvénytelen értéket egy alapértelmezett értékre cseréli.

A Visual Studio bizonyos tulajdonságok alapértelmezett beállításait értelmezi. Ezek a tulajdonságok csak akkor maradnak meg a projektfájlban, ha nem alapértelmezett értékekkel rendelkeznek.

Az tetszőleges neveket tartalmazó tulajdonságok nem jelennek meg a Visual Studióban. Ha tetszőleges tulajdonságokat szeretne módosítani a Visual Studióban, meg kell nyitnia a projektfájlt az XML-szerkesztőben, és kézzel kell szerkesztenie őket. További információt a jelen témakör későbbi részében, a Visual Studio projektfájljainak szerkesztése című szakaszában talál.

A projektben tetszőleges elemtípusnevekkel definiált elemek alapértelmezés szerint megjelennek a Megoldáskezelőben a projektcsomópont alatt. Ha el szeretne rejteni egy elemet a megjelenítés elől, állítsa a metaadatokat a Visible következőre false: . Az alábbi elem például részt vesz a buildelési folyamatban, de nem jelenik meg a Megoldáskezelőben.

<ItemGroup>
    <IntermediateFile Include="cache.temp">
        <Visible>false</Visible>
    </IntermediateFile>
</ItemGroup>

Megjegyzés:

A Visiblemetaadatokat a Megoldáskezelő c++ projektek esetén figyelmen kívül hagyja. Az elemek mindig megjelennek, még akkor is, ha Visible hamis értékre van állítva.

A projektbe importált fájlokban deklarált elemek alapértelmezés szerint nem jelennek meg. A buildelési folyamat során létrehozott elemek soha nem jelennek meg a Megoldáskezelőben.

Elemekre és tulajdonságokra vonatkozó feltételek

A buildelés során a rendszer minden feltételt teljes mértékben betart.

A megjelenítendő tulajdonságértékek meghatározásakor a Visual Studio által a konfigurációfüggőnek ítélt tulajdonságokat a rendszer másképp értékeli ki, mint a konfigurációfüggetlennek ítélt tulajdonságokat. A konfigurációfüggőnek ítélt tulajdonságok esetében a Visual Studio megfelelően állítja be a Configuration tulajdonságokat, Platform és utasítja az MSBuildet a projekt újraértékelésére. A konfigurációt függetlennek tekintő tulajdonságok esetében nem határozza meg, hogy a feltételek hogyan lesznek kiértékelve.

Az elemek feltételes kifejezéseit mindig figyelmen kívül hagyja annak eldöntése érdekében, hogy az elem megjelenjen-e a Megoldáskezelőben.

Hibakeresés

A kimeneti szerelvény megkereséséhez és elindításához és a hibakereső csatolásához a Visual Studiónak szüksége van a tulajdonságokra OutputPath, AssemblyNameés OutputType helyesen kell meghatározni. A hibakereső nem tud csatlakozni, ha a build folyamat nem készített a fordító egy .pdb fájlt.

Tervezési idő alatti cél végrehajtás

A Visual Studio bizonyos nevű célokat kísérel meg végrehajtani, amikor betölt egy projektet. Ezek a célok a következők: Compile, ResolveAssemblyReferences, ResolveCOMReferences, GetFrameworkPathsés CopyRunEnvironmentFiles. A Visual Studio futtatja ezeket a célokat, hogy a fordító inicializálható legyen az IntelliSense biztosítása érdekében, a hibakereső inicializálható, és a Megoldáskezelőben megjelenő hivatkozások feloldhatók. Ha ezek a célok nem elérhetők, a projekt megfelelően betöltődik és felépül, de a Visual Studio tervezési környezet nem lesz teljesen funkcionális.

Projektfájlok szerkesztése a Visual Studióban

Ha közvetlenül szeretne szerkeszteni egy MSBuild projektet, nyissa meg a projektfájlt a Visual Studio XML-szerkesztőjében.

Projektfájl eltávolítása és szerkesztése a Visual Studióban

  1. A Megoldáskezelőben kattintson a jobb gombbal a projektcsomópontra, majd válassza a Projekt eltávolítása parancsot.

    A projekt megjelölése (nem érhető el).

  2. A Megoldáskezelőben kattintson a jobb gombbal a nem elérhető projektcsomópontra, majd válassza a Projektfájl szerkesztése parancsot<>.

    A projektfájl megnyílik a Visual Studio XML-szerkesztőjében.

  3. Szerkessze, mentse, majd zárja be a projektfájlt.

  4. A Megoldáskezelőben kattintson a jobb gombbal a nem elérhető projektcsomópontra, majd válassza a Project újratöltése parancsot.

IntelliSense és ellenőrzés

Ha az XML-szerkesztővel szerkessze a projektfájlokat, az IntelliSense és az ellenőrzés az MSBuild sémafájlokon alapul. Ezek telepítve vannak a séma-gyorsítótárban, amely megtalálható a Visual Studio telepítési könyvtárában<>\Xml\Schemas\1033\MSBuild.

Az MSBuild alapvető típusait a Microsoft.Build.Core.xsd határozza meg, a Visual Studio által használt gyakori típusokat pedig a Microsoft.Build.CommonTypes.xsd határozza meg. Ha úgy szeretné testre szabni a sémákat, hogy az IntelliSense és az egyéni elemtípusok nevének, tulajdonságainak és feladatainak érvényesítése legyen, szerkessze a Microsoft.Build.xsd fájlt, vagy hozzon létre egy saját sémát, amely tartalmazza a CommonTypes vagy a Core sémákat. Ha saját sémát hoz létre, az XML-szerkesztőt a Tulajdonságok ablakban kell megkeresnie.

Betöltött projektfájlok szerkesztése

A Visual Studio gyorsítótárazza a projektfájlok és a projektfájlok által importált fájlok tartalmát. Ha egy betöltött projektfájlt szerkeszt, a Visual Studio automatikusan kérni fogja a projekt újbóli betöltését, hogy a módosítások érvénybe lépjenek. Ha azonban egy betöltött projekt által importált fájlt szerkeszt, nem jelenik meg újratöltési kérés, és manuálisan kell eltávolítania és újra betöltenie a projektet a módosítások érvénybe lépéséhez.

Kimeneti csoportok

Számos cél, amely a Microsoft.Common.targets-ban van definiálva, rendelkezik olyan nevekkel, amelyek OutputGroups-re vagy OutputGroupDependencies-re végződnek. A Visual Studio meghívja ezeket a célokat a projektkimenetek konkrét listáinak lekéréséhez. Például a SatelliteDllsProjectOutputGroup cél létrehoz egy listát az összes műholdszerelvényről, amit a build folyamat hoz létre. Ezeket a kimeneti csoportokat olyan funkciók használják, mint a közzététel, az üzembe helyezés és a projektprojektre vonatkozó hivatkozások. Azok a projektek, amelyek nem definiálják őket, betölthetők és buildelhetők a Visual Studióban, de előfordulhat, hogy egyes funkciók nem működnek megfelelően.

Referenciafeloldás

A referenciafeloldás az a folyamat, amely a projektfájlban tárolt referenciaelemeket használja a tényleges szerelvények megkereséséhez. A Visual Studiónak aktiválnia kell a hivatkozás felbontását, hogy részletes tulajdonságok jelenjenek meg az egyes hivatkozásokhoz a Tulajdonságok ablakban. Az alábbi lista a három hivatkozástípust és azok megoldásának módját ismerteti.

  • Szerelvényhivatkozások:

    A projektrendszer egy jól ismert nevű ResolveAssemblyReferencescélt hív meg. Ennek a célnak az elemtípusnévvel ReferencePathrendelkező elemeket kell létrehoznia. Mindegyik elemnek rendelkeznie kell egy elem specifikációval (egy elem attribútumának Include értéke), amely tartalmazza a hivatkozás teljes elérési útját. Az elemeknek az alábbi új metaadatok mellett a bemeneti elemek összes metaadatával kell rendelkezniük:

    • CopyLocal, amely azt jelzi, hogy a szerelvényt át kell-e másolni a kimeneti mappába, igaz vagy hamis értékre állítva.

    • az OriginalItemSpec elemet, amely tartalmazza a hivatkozás eredeti elem specifikációját.

    • ResolvedFrom, állítsa be a következőre: "{TargetFrameworkDirectory}", ha az a .NET-keretrendszer könyvtárából került feloldásra.

  • COM-hivatkozások:

    A projektrendszer egy jól ismert nevű ResolveCOMReferencescélt hív meg. Ennek a célnak az elemtípusnévvel ComReferenceWrappersrendelkező elemeket kell létrehoznia. Ezeknek az elemeknek rendelkezniük kell egy olyan elemspecifikációval, amely tartalmazza a COM-referencia interop szerelvényének teljes elérési útját. Az elemeknek az átadott bemeneti elemek összes metaadatával kell rendelkezniük, a névvel CopyLocalellátott új metaadatok mellett azt is jelzik, hogy a szerelvényt át kell-e másolni a kimeneti mappába, igaz vagy hamis értékre kell állítani.

  • Natív hivatkozások

    A projektrendszer egy jól ismert nevű ResolveNativeReferencescélt hív meg. Ennek a célnak az elemtípusnévvel NativeReferenceFilerendelkező elemeket kell létrehoznia. Az elemeknek a referencia eredeti elemspecifikációját tartalmazó új metaadat mellett tartalmazniuk kell az átmenő bemeneti elemek összes metaadatát OriginalItemSpec.

Teljesítmény gyorsbillentyűk

Ha a Visual Studio IDE használatával indítja el a hibakeresést (az F5 billentyű kiválasztásával vagy a hibakeresési>hibakeresés menüsávon történő kiválasztásával), vagy a projekt (példáulbuildelési megoldás> elkészítéséhez, a buildelési folyamat egy gyors frissítési ellenőrzést használ a teljesítmény javítása érdekében. Bizonyos esetekben, amikor a testreszabott buildek olyan fájlokat hoznak létre, amelyek beépülnek, a gyors frissítés ellenőrzése nem azonosítja megfelelően a módosított fájlokat. Az alaposabb frissítési ellenőrzéseket igénylő projektek a környezeti változó DISABLEFASTUPTODATECHECK=1beállításával kikapcsolhatják a gyors ellenőrzést. Azt is megteheti, hogy a projektek ezt MSBuild tulajdonságként állítják be a projektben vagy egy olyan fájlban, amelybe a projekt importál.