Megosztás a következőn keresztül:


Forráskód és konfigurációs fájlok átalakítása

A forráskód-átalakítás egyirányú tokencserét alkalmaz a csomag content vagy contentFiles mappájában lévő fájlokra (content az packages.config-t használó ügyfeleknek és contentFiles-t használó ügyfeleknek PackageReference), ahol a tokenek a Visual Studio projekt tulajdonságaira vonatkoznak. Ez lehetővé teszi egy fájl beszúrását a projekt névterébe, vagy testre szabhatja azokat a kódot, amelyek általában egy ASP.NET projektbe global.asax kerülnek.

A konfigurációs fájlátalakítással módosíthatja a célprojektben már létező fájlokat, például web.config és app.config. Előfordulhat például, hogy a csomagnak hozzá kell adnia egy elemet a modules konfigurációs fájl szakaszához. Ez az átalakítás a konfigurációs fájlokhoz hozzáadni kívánt szakaszokat leíró speciális fájlokkal történik a csomagban. A csomagok eltávolítása után ugyanezek a módosítások vissza lesznek fordítva, így ez egy kétirányú átalakítás lesz.

Forráskódátalakítások megadása

  1. A csomagból a projektbe beszúrni kívánt fájloknak a csomagban content és contentFiles a mappákban kell lenniük. Ha például azt szeretné, hogy egy fájl ContosoData.cs a célprojekt egyik Models mappájába legyen telepítve, annak a csomagban, a content\Models és contentFiles\{lang}\{tfm}\Models mappákban kell lennie.

  2. Ha arra szeretné utasítani a NuGetet, hogy a telepítéskor alkalmazza a tokencserét, fűzze hozzá .pp a forráskódfájl nevét. A telepítés után a fájl nem rendelkezik a .pp kiterjesztéssel.

    Ha például átalakításokat ContosoData.csszeretne végezni, nevezze el a fájlt a csomagban ContosoData.cs.pp. A telepítés után a következőként jelenik meg: ContosoData.cs.

  3. A forráskódfájlban az $token$ kis- és nagybetűket nem megkülönböztető tokenek használatával jelezze, mely értékeket kell a NuGet-nek projekttulajdonságokkal helyettesítenie.

    namespace $rootnamespace$.Models
    {
        public struct CategoryInfo
        {
            public string categoryid;
            public string description;
            public string htmlUrl;
            public string rssUrl;
            public string title;
        }
    }
    

    Telepítéskor a NuGet a $rootnamespace$-t Fabrikam-re cseréli, feltéve, hogy a célprojekt gyökérnévtere Fabrikam.

A $rootnamespace$ token a leggyakrabban használt projekttulajdonság; a többi a projekttulajdonságok között található. Természetesen vegye figyelembe, hogy egyes tulajdonságok a projekt típusára lehetnek jellemzőek.

Konfigurációs fájlátalakítások megadása

A következő szakaszokban leírtak szerint a konfigurációs fájlátalakítások kétféleképpen végezhetők el:

  • Vegye fel a app.config.transform és web.config.transform fájlokat a csomag content mappájába, ahol a .transform kiterjesztés tájékoztatja a NuGet-et, hogy ezek a fájlok tartalmazzák az XML-t, melyet a meglévő konfigurációs fájlokkal kell egyesíteni a csomag telepítésekor. Egy csomag eltávolításakor ugyanez az XML el lesz távolítva.
  • A csomag content mappájába vegye fel a app.config.install.xdt és web.config.install.xdt fájlokat, és a kívánt módosítások leírásához használjon XDT szintaxist. Ezzel a beállítással olyan .uninstall.xdt fájlt is megadhat, amely megfordítja a módosításokat, amikor a csomagot eltávolítják egy projektből.

Megjegyzés:

Az átalakítások nem vonatkoznak a .config Visual Studióban hivatkozásként hivatkozott fájlokra.

Az XDT használatának előnye, hogy ahelyett, hogy egyszerűen egyesít két statikus fájlt, szintaxist biztosít az XML DOM szerkezetének a teljes XPath-támogatással való elem- és attribútumegyeztetés használatával történő manipulálására. Az XDT ezután hozzáadhat, frissíthet vagy eltávolíthat elemeket, új elemeket helyezhet el egy adott helyen, vagy lecserélheti/eltávolíthatja az elemeket (beleértve a gyermekcsomópontokat is). Ez megkönnyíti az eltávolítási átalakítások létrehozását, amelyek a csomag telepítése során végrehajtott összes átalakítást visszavetik.

XML-átalakítások

A csomag content mappájában található app.config.transform és web.config.transform csak azokat az elemeket tartalmazza, amelyek egyesíthetők a projekt meglévő app.config és web.config fájljaival.

Tegyük fel például, hogy a projekt kezdetben a következő tartalmat tartalmazza:web.config

<configuration>
    <system.webServer>
        <modules>
            <add name="ContosoUtilities" type="Contoso.Utilities" />
        </modules>
    </system.webServer>
</configuration>

Ha a csomag telepítése során hozzá szeretne adni egy MyNuModule elemet a modules szakaszhoz, hozzon létre egy web.config.transform fájlt a csomag mappájában content , amely így néz ki:

<configuration>
    <system.webServer>
        <modules>
            <add name="MyNuModule" type="Sample.MyNuModule" />
        </modules>
    </system.webServer>
</configuration>

Miután a NuGet telepítette a csomagot, web.config a következőképpen fog megjelenni:

<configuration>
    <system.webServer>
        <modules>
            <add name="ContosoUtilities" type="Contoso.Utilities" />
            <add name="MyNuModule" type="Sample.MyNuModule" />
        </modules>
    </system.webServer>
</configuration>

Figyelje meg, hogy a NuGet nem cserélte le a modules szakaszt, csak új elemek és attribútumok hozzáadásával egyesítette az új bejegyzést. A NuGet nem módosítja a meglévő elemeket és attribútumokat.

A csomag eltávolítása után a NuGet újra megvizsgálja a .transform fájlokat, és eltávolítja a benne található elemeket a megfelelő .config fájlokból. Vegye figyelembe, hogy ez a folyamat nem befolyásolja a fájl azon sorait, amelyeket a .config csomag telepítése után módosít.

Részletesebb példaként az ASP.NET (ELMAH) csomag hibanaplózó moduljai és kezelői számos bejegyzést web.configadnak hozzá, amelyek egy csomag eltávolításakor újra törlődnek.

A fájl vizsgálatához web.config.transform töltse le az ELMAH-csomagot a fenti hivatkozásból, változtassa meg a csomagbővítményt .nupkg-ről .zip-re, majd nyissa meg a content\web.config.transform fájlt abban a ZIP-fájlban.

A csomag telepítésének és eltávolításának hatásának megtekintéséhez hozzon létre egy új ASP.NET projektet a Visual Studióban (a sablon a Visual C# > Web alatt található az Új projekt párbeszédpanelen), és válasszon egy üres ASP.NET alkalmazást. Nyissa meg web.config a kezdeti állapot megtekintéséhez. Ezután kattintson a jobb gombbal a projektre, válassza a NuGet-csomagok kezelése lehetőséget, keresse meg az ELMAH-t a nuget.org, és telepítse a legújabb verziót. Figyelje meg a módosításokat.web.config Most távolítsa el a csomagot, és látni fogja, hogy web.config visszaáll a korábbi állapotára.

XDT-átalakítások

Megjegyzés:

Ahogy az a dokumentáció csomagkompatibilitási problémáinak szakaszában is szerepel, az packages.configPackageReferenceXDT-átalakításokat az alábbiakban leírtak szerint csak a packages.configprogram támogatja. Ha hozzáadja az alábbi fájlokat a csomaghoz, a használatával fogyasztók nem fogják automatikusan alkalmazni az átalakításokat (példát lásd itt arra, hogyan lehet az XDT-átalakításokat működőképessé tenni).

A konfigurációs fájlokat XDT-szintaxissal módosíthatja. Azt is megteheti, hogy a NuGet-helyőrzőket projekttulajdonságokra cseréli, ha a tulajdonság nevét a $ határolók közé foglalja (kis- és nagybetűket nem érzékenyítő).

A következő app.config.install.xdt fájl például beszúr egy appSettings elemet a app.config elembe, amely tartalmazza a projektből származó FullPath, FileName, és ActiveConfigurationSettings értékeket.

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
    <appSettings xdt:Transform="Insert">
        <add key="FullPath" value="$FullPath$" />
        <add key="FileName" value="$filename$" />
        <add key="ActiveConfigurationSettings " value="$ActiveConfigurationSettings$" />
    </appSettings>
</configuration>

Tegyük fel például, hogy a projekt kezdetben a következő tartalmat tartalmazza:web.config

<configuration>
    <system.webServer>
        <modules>
            <add name="ContosoUtilities" type="Contoso.Utilities" />
        </modules>
    </system.webServer>
</configuration>

Az modules szekcióhoz egy MyNuModule elemet szeretne hozzáadni a csomag telepítése során, a csomag web.config.install.xdt a következőket tartalmazza:

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
    <system.webServer>
        <modules>
            <add name="MyNuModule" type="Sample.MyNuModule" xdt:Transform="Insert" />
        </modules>
    </system.webServer>
</configuration>

A csomag web.config telepítése után a következőképpen fog kinézni:

<configuration>
    <system.webServer>
        <modules>
            <add name="ContosoUtilities" type="Contoso.Utilities" />
            <add name="MyNuModule" type="Sample.MyNuModule" />
        </modules>
    </system.webServer>
</configuration>

Ha csak az elemet szeretné eltávolítani a MyNuModule csomag eltávolítása során, a fájlnak a web.config.uninstall.xdt következőket kell tartalmaznia:

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
    <system.webServer>
        <modules>
            <add name="MyNuModule" xdt:Transform="Remove" xdt:Locator="Match(name)" />
        </modules>
    </system.webServer>
</configuration>