Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
SolutionPackager är ett verktyg som kan återställa en Microsoft Dataverse komprimerad lösningsfil till flera XML-filer och andra filer. Du kan då enkelt hantera dessa filer med hjälp av ett källkontrollsystem. I följande avsnitt lär du dig hur du kör verktyget och hur du använder verktyget med hanterade och icke-hanterade lösningar.
Viktigt
Verktyget SolutionPackager är inte längre det rekommenderade sättet att packa upp och packa lösningar. Funktionerna i SolutionPackager-verktyget ingår i Power Platform CLI. Kommandot pac solution har många verb, inklusive unpack, pack, cloneoch sync som innehåller samma underliggande funktioner i SolutionPackager-verktyget.
Här hittar du verktyget SolutionPackager
SolutionPackager-verktyget distribueras som en del av Microsoft. CrmSdk.CoreTools NuGet-paket. Följ de här stegen för att installera appen.
- Ladda ned NuGet-paketet.
- Byt namn på filnamnstillägget för paketet från .nupkg till .zip.
- Extrahera innehållet i den komprimerade (zip) filen.
Leta upp den körbara filen SolutionPackager.exe i mappen <extracted-folder-name>/contents/bin/coretools. Kör programmet från mappen coretools eller lägg till mappen i PATH.
Kommandoradargument för SolutionPackager
SolutionPackager är ett kommandoradsverktyg som kan startas med de parametrar som anges i följande tabell.
| Argument | Beskrivning |
|---|---|
| /action: {Extrahera|Packa} | Obligatoriskt. Den åtgärd som ska utföras. Åtgärden kan antingen extrahera en zip-fil för en lösning till en mapp eller för att packa en mapp i en zip-fil. |
| /zipfile: <sökväg till filen> | Obligatoriskt. Sökväg och namn för en lösnings-zip-fil. När filen extraheras måste den finnas och vara läsbar. Vid packning ersätts filen. |
| /folder: <sökväg till mapp> | Obligatoriskt. Sökvägen till en mapp. När den här mappen extraheras skapas och fylls mappen i med komponentfiler. Om du väljer att paketera måste mappen redan finnas och innehålla komponentfiler som redan har extraherats. |
| /packagetype: {Ohanterad|Hanterad|Båda} | Valfritt. Den pakettyp som ska bearbetas. Standardvärdet är Ej hanterad. Detta argument kan utelämnas i de flesta fall eftersom pakettypen kan läsas från en zip-fil eller komponentfiler. När du extraherar och "Båda" är angivna, måste hanterade och icke-hanterade lösnings .zip-filer finnas tillgängliga och bearbetas till en enda mapp. När "Båda" är angivet vid paketering, framställs hanterade och icke-hanterade lösningar som zip-filer från en mapp. Mer information finns i avsnittet om att arbeta med hanterade och icke-hanterade lösningar senare i denna artikel. |
| /allowWrite:{Ja|Nej} | Valfritt. Standardvärdet är Ja. Detta argument används endast under extraktion. När "/allowWrite: Nej" anges utför verktyget alla åtgärder men inte skriva eller radera några filer. Extraheringsåtgärden kan utvärderas på ett säkert sätt utan att befintliga filer skrivs över eller tas bort. |
| /allowDelete:{Yes|No|Prompt} | Valfritt. Standardvärdet är "Prompt". Detta argument används endast under extraktion. När "/allowDelete:Yes" anges tas alla filer som oväntat finns i mappen som anges i parametern "/folder" bort automatiskt. När /allowDelete:No anges görs inga borttagningar. När "/allowDelete:Prompt" anges uppmanas användare via konsolen att tillåta eller neka alla borttagningsåtgärder. Observera att om /allowWrite:No anges görs inga borttagningar även om /allowDelete:Yes också anges. |
| /clobber | Valfritt. Detta argument används endast under extraktion. När "/clobber" anges skrivs filer med skrivskyddat attribut över eller tas bort. När det inte anges skrivs filer med det skrivskyddade attributet inte över och tas inte bort. |
| /errorlevel: {Off|Fel|Varning|Info|Utförlig} | Valfritt. Standardprefixet är "Info". Detta argument anger vilken loggningsinformation som ska matas ut. |
| /map: <sökväg till filen> | Valfritt. Sökvägen till och namnet på en .xml-fil som innehåller filmappningsdirektiv. När den används vid extrahering, läses filer som vanligtvis läses inifrån den mapp som specificerats av parametern /folder istället från alternativa platser enligt angivet i mappningsfilen. Under en paketåtgärd skrivs inte filer som matchar direktiven. |
| /nologo | Valfritt. Undertryck banderollen under körning. |
| /log: <sökväg till filen> | Valfritt. En sökväg och ett namn till en loggfil. Om filen redan finns läggs den nya loggningsinformationen till i filen. |
| @ <filsökväg> | Valfritt. En sökväg och ett namn till en fil som innehåller kommandoradsargument för verktyget. |
| /sourceLoc: <sträng> | Valfritt. Detta argument genererar en mallresursfil och är endast giltig vid extrahering. Möjliga värden är auto eller en LCID/ISO-kod för det språk du vill exportera. När det här argumentet används extraheras strängresurserna från de nationella inställningarna som en neutral RESX-fil. Om auto eller bara den långa eller korta formen av omkopplaren anges, används baslokalen eller lösningen. Kommandot kan användas i kortform: /src. |
| /localize | Valfritt. Extrahera eller slå samman alla strängresurser till RESX-filer. Kommandot kan användas i kortform: /loc. Lokaliseringsalternativet stöder delade komponenter för .resx-filer. Mer information: Använda RESX-webbresurser |
| /SolutionName: <namn> | Valfritt. Det unika namnet på lösningen som ska packas eller extraheras när källmappen innehåller flera lösningar under solutions/*/solution.yml. Krävs när mer än en lösning identifieras. Gäller endast yaml-källkontrollformatet. Du kan använda kommandots korta form: /sn. |
| /remapPluginTypeNames | Valfritt. När detta anges mappas namn på fullständigt kvalificerade typer av plugin-program om baserat på de sammansättningar som ingår i lösningen. Aktiverad som standard i YAML-källkontrollformatet. Du kan använda kommandots korta form: /fp. |
Filformat för källkontroll
SolutionPackager stöder två mappstrukturer när du extraherar och packar lösningar.
XML-format (äldre)
Det ursprungliga formatet. Lösningsmetadata lagras i Other\Solution.xml och Other\Customizations.xml, och alla komponentfiler extraheras till en platt mapphierarki tillsammans med dessa filer. Det här formatet är standardformatet när du extraherar en .zip fil utan mer konfiguration.
YAML-källkontrollformat
Det här formatet introducerades tillsammans med Dataverse Git-integrering och lagrar lösningsmetadata som YAML-filer som distribueras över en strukturerad mapphierarki. Det är formatet som skrivs när du genomför lösningar med inbyggd Git-integrering i Power Apps.
Fördelar jämfört med XML-format
- Producerar renare, mer läsbara diff per komponent i källkontrollen
- Stöder flera lösningar i en enda lagringsplatsmapp
- Canvas app-filer
.msappoch moderna flöden stöds endast i det här formatet - Ommappning av plugin-typnamn är aktiverat som standard
Nödvändig mappstruktur
<rootFolder>/
├── solutions/
│ └── <SolutionUniqueName>/
│ ├── solution.yml (solution metadata)
│ ├── solutioncomponents.yml (paths to all component files)
│ ├── rootcomponents.yml (root-level components)
│ └── missingdependencies.yml (dependency info)
├── publishers/
│ └── <PublisherUniqueName>/
│ └── publisher.yml (publisher definition)
├── entities/ (entity components, if present)
├── workflows/ (classic workflows, if present)
├── modernflows/ (Power Automate cloud flows, if present)
├── canvasapps/ (canvas app .msapp files, if present)
└── [other component folders]/
Viktigt
YAML-formatet identifieras automatiskt av förekomsten av en solutions/ undermapp som innehåller *solution.yml filer.
Om yaml-manifestfilerna (solution.yml, solutioncomponents.ymloch så vidare) placeras i mappens rot i stället för under solutions/<SolutionUniqueName>/identifierar verktyget inte YAML-formatet. Verktyget återgår till XML-vägen och rapporterar ett vilseledande fel om en saknad Customizations.xml. Mer information om hur du åtgärdar det här problemet finns i Felsökning.
Mer information: Referens för yaml-källkontrollformat för lösning
Formatera regler för automatisk identifiering
| Tillstånd | Format som används |
|---|---|
solutions/*/solution.yml hittade – exakt en lösning |
YAML-format, där lösningsnamnet härleds från mappen |
solutions/*/solution.yml hittades – flera lösningar |
YAML-format, där /SolutionName argumentet krävs |
Ingen underkatalog solutions/ finns |
XML-format (äldre) |
Packning av en YAML-formatmapp
Följande kommando packar en YAML-formatmapp.
SolutionPackager.exe /action:Pack /zipfile:MySolution.zip /folder:C:\repos\myrepo
Paketering från en mapp med flera lösningar
Följande kommando packar en angiven lösning i en mapp med flera lösningar.
SolutionPackager.exe /action:Pack /zipfile:SolutionA.zip /folder:C:\repos\myrepo /SolutionName:SolutionA
Använda kommandoargumentet /map
I följande diskussion beskrivs hur du använder argumentet /map med verktyget SolutionPackager.
Filer som är inbyggda i ett automatiserat versionssystem, t. ex. xap Silverlight-filer och plugin-programpaket, kontrolleras som regel inte i källkontrollen. Webbresurser kanske redan finns i källkontrollen på platser som inte är direkt kompatibla med verktyget SolutionPackager. Om du inkluderar parametern /map kan verktyget SolutionPackager användas för att läsa och paketera sådana filer från alternativa platser och inte som vanligt från insidan av extraheringsmappen. I parametern /map måste namnet och sökvägen till en XML-fil med mappning anges. De uppger att SolutionPackager ska matcha filernas namn och sökväg och ange en alternativ plats för att hitta den matchande filen. Följande information gäller lika för alla direktiv.
Flera direktiv kan visas, inklusive de direktiv som överensstämmer med identiska filer. Direktiv som visas tidigt i filen har högre prioritet än de direktiv som visas i listan senare.
Om en fil matchas mot ett annat direktiv måste den finnas på minst en alternativ plats. Om det inte finns några matchande alternativ kommer SolutionPackager att utfärda ett fel.
Mapp- och filsökvägar kan vara absoluta eller relativa. Relativa sökvägar utvärderas alltid från den mapp som anges med parametern /folder.
Miljövariabler kan anges med syntaxen %variable%.
Jokertecknet för mappar "**" används för att beteckna "i alla undermappar". Den kan bara användas som den sista delen av en sökväg, till exempel: "c:\folderA\**".
Jokertecken för filnamn får endast användas i formulären "*.ext" eller "*.*". Inget annat mönster stöds.
De tre typerna av direktivmappningar beskrivs här tillsammans med ett exempel som visar hur du använder dem.
Mapphantering
Nedan finns detaljerad information om mapp-mappning.
XML-format
<Folder map="folderA" to="folderB" />
Description
Filsökvägar som matchar "folderA" växlas till "folderB".
Mapphierarkin för undermappar under varje måste matcha exakt.
Jokertecken för mappar stöds inte.
Inga filnamn kan anges.
Exempel
<Folder map="folderA" to="folderB" /> <Folder map="folderA\folderB" to="..\..\folderC\" /> <Folder map="WebResources\subFolder" to="%base%\WebResources" />
Fil-till-fil-mappning
Nedan finns detaljerad information om mappning fil till fil.
XML-format
<FileToFile map="path\filename.ext" to="path\filename.ext" />
Description
Alla filer som matchar map-parametern kommer att läsas från namnet och sökvägen som anges i to-parametern.
För map-parametern:
Ett filnamn måste anges. Sökvägen är valfri. Om ingen sökväg anges kan filer från alla mappar matchas.
Jokertecken för filnamn stöds inte.
Jokertecknet för mappen stöds.
För
to-parametern:Ett filnamn och en sökväg måste anges.
Filnamnet kan skilja sig från namnet i
map-parametern.Jokertecken för filnamn stöds inte.
Jokertecknet för mappen stöds.
Exempel
<FileToFile map="assembly.dll" to="c:\path\folder\assembly.dll" />
<FileToFile map="PluginAssemblies\**\this.dll" to="..\..\Plugins\**\that.dll" />
<FileToFile map="Webresrouces\ardvark.jpg" to="%SRCBASE%\CrmPackage\WebResources\JPG format\aardvark.jpg" />
<FileToFile
map="pluginpackages\cr886_PluginPackageTest\package\cr886_PluginPackageTest.nupkg"
to="myplg\bin\Debug\myplg.1.0.0.nupkg" />
I NuGet-paketexemplet ovan, skrivs cr886_PluginPackageTest.nupkg inte över om filen redan finns på den angivna platsen.
Mappning av fil till sökväg
Nedan finns detaljerad information om mappning fil till sökväg.
XML-format
<FileToPath map="path\filename.ext" to="path" />
Description
Alla filer som matchar map-parametern kommer att läsas från sökvägen som anges i to-parametern.
För map-parametern:
Ett filnamn måste anges. Sökvägen är valfri. Om ingen sökväg anges kan filer från alla mappar matchas.
Jokertecken för filnamn stöds.
Jokertecknet för mappen stöds.
För to-parametern:
En sökväg måste anges.
Jokertecknet för mappen stöds.
Ett filnamn ska inte anges.
Exempel
<FileToPath map="assembly.dll" to="c:\path\folder" />
<FileToPath map="PluginAssemblies\**\this.dll" to="..\..\Plugins\bin\**" />
<FileToPath map="*.jpg" to="%SRCBASE%\CrmPackage\WebResources\JPG format\" />
<FileToPath map="*.*" to="..\..\%ARCH%\%TYPE%\drop" />
Exempel på mappning
Följande XML-kodexempel visar en fullständig mappningsfil som gör att SolutionPackager-verktyget kan läsa alla webbresurser och de två standardgenererade sammansättningarna från ett Utvecklare Toolkit-projekt kallat CRMDevTookitSample.
<?xml version="1.0" encoding="utf-8"?>
<Mapping>
<!-- Match specific named files to an alternate folder -->
<FileToFile map="CRMDevTookitSamplePlugins.dll" to="..\..\Plugins\bin\**\CRMDevTookitSample.plugins.dll" />
<FileToFile map="CRMDevTookitSampleWorkflow.dll" to="..\..\Workflow\bin\**\CRMDevTookitSample.Workflow.dll" />
<!-- Match any file in and under WebResources to an alternate set of subfolders -->
<FileToPath map="WebResources\*.*" to="..\..\CrmPackage\WebResources\**" />
<FileToPath map="WebResources\**\*.*" to="..\..\CrmPackage\WebResources\**" />
</Mapping>
Hanterade och icke-hanterade lösningar
Du kan exportera en Dataverse komprimerad lösningsfil (zip) i en av de två typer som visas här.
Hanterad lösning
En slutförd lösning som kan importeras till en organisation. När komponenterna har importerats kan de inte läggas till eller tas bort, även om de kan tillåta ytterligare anpassning. Detta rekommenderas när utvecklingen av lösningen har slutförts.
Ohanterad lösning
En öppen lösning utan begränsningar för vad som kan läggas till, tas bort eller ändras. Detta rekommenderas i samband med utveckling av en lösning.
Formatet för en komprimerad lösningsfil varierar beroende på typ, antingen hanterad eller icke-hanterad. Med SolutionPackager kan du bearbeta komprimerade lösningsfiler av bägge typer. Verktyget kan dock inte konvertera en typ till en annan. Det enda sättet att konvertera lösningsfiler till en annan typ, t.ex. från icke-hanterad till hanterad, är att importera den icke-hanterade lösningsfilen i zip-format till en Dataverse-server och sedan exportera lösningen som en hanterad lösning.
SolutionPackager kan bearbeta icke-hanterade och hanterade lösningsfiler i zip-format som en sammanlagd uppsättning via parametern "/PackageType:Both". Om du vill utföra den här åtgärden måste du exportera lösningen två gånger för respektive typ och namnge zip-filerna enligt följande:
Icke-hanterad zip-fil: AnyName.zip
Hanterad zip-fil: AnyName_managed.zip
Verktyget förutsätter förekomst av den hanterade zip-filen i samma mapp som den icke-hanterade filen och extraherar båda filer till en enda mapp som bevarar skillnaderna där såväl hanterade som icke-hanterade komponenter förekommer.
När en lösning har extraherats både som icke-hanterad och hanterad är det möjligt att från denna enda mapp paketera båda typer (eller respektive typ individuellt) med hjälp av parametern/PackageType i syfte att ange vilken typ som ska skapas. När båda filer anges kommer två zip-filer att produceras enligt namngivningskonventionen ovan. Om parametern /PackageType saknas när du packar från en dubbel hanterad och icke-hanterad mapp är standardvärdet att skapa en enkel, icke-hanterad zip-fil.
Felsökning
Meddelande som visas när du använder Visual Studio för att redigera resursfiler
Om du använder Visual Studio för att redigera resursfiler som skapats av lösningspaketeraren kan du få ett meddelande när du packar om så här: "Failed to determine version id of the resource file <filename>.resx the resource file must be exported from the solutionpackager.exe tool in order to be used as part of the pack process." Detta beror på att Visual Studio ersätter resursfilens metadatataggar med datataggar.
Lösning
Öppna resursfilen i din favorittextredigerare och sök efter samt uppdatera följande taggar:
<data name="Source LCID" xml:space="preserve"> <data name="Source file" xml:space="preserve"> <data name="Source package type" xml:space="preserve"> <data name="SolutionPackager Version" mimetype="application/x-microsoft.net.object.binary.base64">Ändra nodnamnet från
<data>till<metadata>.Till exempel följande sträng:
<data name="Source LCID" xml:space="preserve"> <value>1033</value> </data>Ändras till:
<metadata name="Source LCID" xml:space="preserve"> <value>1033</value> </metadata>Detta gör att lösningspaketeraren kan läsa och importera resursfilen. Det här problemet har bara observerats när du använder Visual Studio Resursredigeraren.
Fel: "Det går inte att hitta nödvändig fil ...\Other\Customizations.xml" med en YAML-mapp
Det här felet visas när du kör SolutionPackager (eller pac solution pack) mot en mapp som innehåller YAML-filer som solution.yml, men dessa filer placeras i mappens rot i stället för inuti den nödvändiga solutions/<SolutionUniqueName>/ undermappen.
Orsaka: Verktyget identifierar YAML-källkontrollformatet genom att leta efter en solutions/ undermapp som innehåller *solution.yml filer. När katalogen saknas återgår verktyget tyst till XML-formatet (äldre) och förväntar sig Other\Customizations.xml. Det resulterande felmeddelandet refererar till en XML-fil och nämner inte YAML, vilket är missvisande.
Fixa: Ordna om mappen så att YAML-manifestfilerna finns under rätt sökvägar:
<rootFolder>/
solutions/<YourSolutionUniqueName>/ ← move solution.yml here
solution.yml
solutioncomponents.yml
rootcomponents.yml
missingdependencies.yml
publishers/<YourPublisherUniqueName>/
publisher.yml
Om du har hämtat mappen från en Git-integreringsincheckning eller pac solution clonebör mappstrukturen redan vara korrekt. En mapp som bara innehåller YAML-filerna på den översta nivån utan underkatalogen solutions/ representerar ett ofullständigt extraheringsextrakt och kan inte packas direkt.
Varning! Komponenten som deklareras i rootcomponents.yml har inga källfiler
Den här varningen visas när en komponent, till exempel en arbetsyteapp, visas i rootcomponents.yml men det inte finns några motsvarande källfiler i den förväntade komponentmappen (till exempel canvasapps/<schema-name>/).
Effekt: Verktyget lyckas fortfarande (slutkod 0) och skapar en giltig .zip fil, men den deklarerade komponenten utelämnas från den paketerade lösningen.
Orsaka: Mappen producerades av ett partiellt extraheringsextrakt, eller så inkluderades inte komponentens källfiler i lagringsplatsen. Till exempel har endast lösningsmanifestfilerna lagts till och inte själva canvas-appen.
Fixa: Kontrollera att alla komponenter som deklareras i rootcomponents.yml har motsvarande källfiler i mappen. För canvas-appar måste filen finnas under canvasapps/<schema-name>/. Om några filer saknas, exportera hela lösningen från Dataverse på nytt och packa upp igen, eller använd pac solution clone för att hämta en komplett extrahering.