Orodje SolutionPackager

SolutionPackager je orodje, ki lahko reverzibilno razgradi Microsoft Dataverse stisnjeno rešilno datoteko na več XML datotek in drugih datotek. Te datoteke lahko nato preprosto upravljate z uporabo sistema za nadzor izvorne kode. Naslednji razdelki prikazujejo, kako zagnati orodje in kako ga uporabljati z upravljanimi in neupravljanimi rešitvami.

Pomembno

Orodje SolutionPackager ni več priporočen način za razpakiranje in pakiranje rešitev. Zmožnosti orodja SolutionPackager so vključene v Power Platform CLI. Ukaz pac solution vsebuje veliko glagolov, vključno z unpack, pack, clone, in sync ki vključujejo enake osnovne zmogljivosti orodja SolutionPackager.

Kje lahko najdete orodje SolutionPackager

Orodje SolutionPackager je distribuirano kot del Microsoft. CrmSdk.CoreTools NuGet paket. Če želite namestiti program, sledite tem korakom.

  1. Prenesite paket. NuGet
  2. Preimenujte končnico datoteke paketa iz .nupkg v .zip.
  3. Izvlecite vsebino stisnjene (zip) datoteke.

Poiščite izvedljivo datoteko SolutionPackager.exe v mapi <ime-izvlečene-mape>/contents/bin/coretools. Zaženite program iz mape coretools ali pa to mapo dodajte v svojo pot.

Argumenti ukazne vrstice za orodje SolutionPackager

SolutionPackager je orodje ukazne vrstice, ki ga je mogoče priklicati s parametri, opredeljenimi v naslednji tabeli.

Argument Description
/dejanje: {Izvleček|Pakiranje} Obvezno. Dejanje za izvedbo. Dejanje je lahko ekstrahiranje datoteke .zip z rešitvijo v mapo ali zapakiranje mape v datoteko .zip.
/zipfile: <pot do datoteke> Obvezno. Pot in ime datoteke .zip z rešitvijo. Pri ekstrahiranju mora datoteka obstajati in biti berljiva. Pri pakiranju se datoteka nadomesti.
/mapa: <pot do mape> Obvezno. Pot do mape. Ko ekstrahirate, se ta mapa ustvari in izpolni z datotekami komponent. Ta mapa mora pri pakiranju že obstajati in vsebovati predhodno ekstrahirane datoteke komponent.
/packagetype: {Neupravljano|Upravljano |Oboje} Izbirno. Vrsta paketa za obdelavo. Privzeta vrednost je »Neupravljano«. Ta argument je lahko v večini primerov izpuščen, ker je mogoče vrsto paketa brati iz datoteke .zip ali datotek komponent. Ko ekstrahirate in je določena možnost »Oboje«, morata biti prisotni datoteki .zip z upravljano in neupravljano rešitvijo ter obdelani v eno mapo. Ko je določeno pakiranje in je oboje, se datoteke .zip upravljane in neupravljane rešitve ustvarijo iz ene mape. Za več informacij glejte razdelek o delu z upravljanimi in neupravljanimi rešitvami v nadaljevanju tega članka.
/allowWrite:{Yes|No} Izbirno. Privzeta vrednost je Da. Ta argument se uporablja samo med ekstrahiranjem. Ko je določena vrednost /allowWrite:No, orodje izvaja vse postopke, vendar ne more pisati ali brisati datotek. Postopek ekstrahiranja lahko varno ocenite brez prepisovanja ali brisanja obstoječih datotek.
/allowDelete:{Yes|No|Prompt} Izbirno. Privzeta vrednost je »Poziv«. Ta argument se uporablja samo med ekstrahiranjem. Ko je določeno /allowDelete:Yes, se vse datoteke v mapi, ki jo določa parameter /folder, ki niso pričakovane, samodejno izbrišejo. Ko je določeno /allowDelete:No, se brisanja ne izvedejo. Ko je določena vrednost /allowDelete:Prompt, je uporabnik prek konzole pozvan, naj dovoli ali zavrne vse postopke brisanja. Če je določeno /allowWrite:No, se brisanje ne izvede, tudi če je določeno tudi /allowDelete:Yes.
/clobber Izbirno. Ta argument se uporablja samo med ekstrahiranjem. Ko je določena vrednost /clobber, se datoteke, ki imajo nastavljen atribut samo za branje, prepišejo ali izbrišejo. Ko ni določeno, datoteke z atributom samo za branje niso prepisane ali izbrisane.
/errorlevel: {Izklopljeno|Napaka|Opozorilo|Informacije|Besedno} Izbirno. Privzeta vrednost je »Podatki«. Ta argument prikazuje raven dnevniških podatkov, ki jih je treba izpisati.
/map: <pot datoteke> Izbirno. Pot in ime datoteke .xml, ki vsebuje direktive za preslikavo datotek. Kadar jih uporabljate med ekstrahiranjem, se datoteke, ki se običajno berejo iz mape, določene s parametrom /folder, berejo z drugih mest, kot je določeno v datoteki za preslikavo. Med operacijo pakiranja datoteke, ki ustrezajo direktivam, niso zapisane.
/nologo Izbirno. Med izvajanjem skrijte pasico.
/log: <pot do datoteke> Izbirno. Pot do dnevniške datoteke in njeno ime. Če datoteka že obstaja, se ji dodajo novi dnevniški podatki.
@ <pot datoteke> Izbirno. Pot do datoteke, ki vsebuje argumente ukazne vrstice za orodje, in njeno ime.
/sourceLoc: <niz> Izbirno. Ta argument ustvari datoteko z virom predloge in je veljaven samo pri ekstrahiranju.

Možne vrednosti so auto ali koda LCID/ISO za jezik, ki ga želite izvoziti. Pri uporabi tega argumenta se viri nizov iz podanih območnih nastavitev ekstrahirajo kot nevtralna datoteka .resx. Če je določena vrednost auto ali pa samo dolga ali kratka oblika stikala, se uporabijo osnovne območne nastavitve ali rešitev. Uporabite lahko kratko obliko ukaza: /src.
/localize Izbirno. Ekstrahirajte ali združite vse vire nizov v datoteke .resx. Uporabite lahko kratko obliko ukaza: /loc. Možnost lokalizacije podpira komponente v skupni rabi za datoteke .resx. Več informacij: Uporaba spletnih virov RESX
/SolutionName: <ime> Izbirno. Edinstveno ime rešitve za pakiranje ali ekstrakcijo, kadar izvorna mapa vsebuje več rešitev pod .solutions/*/solution.yml To je potrebno, kadar je zaznanih več kot ena raztopina. Velja samo za YAML format za upravljanje izvorne kode. Lahko uporabite kratko obliko ukaza: /sn.
/remapPluginTypeNames Izbirno. Ko je določeno, se popolnoma kvalificirana tipna imena vtičnikov preslikajo glede na sestave, vključene v rešitev. Privzeto omogočeno v YAML formatu za upravljanje virne kode. Lahko uporabiš kratko obliko ukaza: /fp.

Formati datotek za nadzor izvorne kode

SolutionPackager podpira dve postavitvi map pri izločanju in pakiranju rešitev.

XML format (dediščina)

Izvirni format. Metapodatki rešitve so shranjeni v Other\Solution.xml in , Other\Customizations.xmlvse datoteke komponent pa se izvlečejo v ravno hierarhijo map skupaj s temi datotekami. Ta format je privzeti format pri izvleku .zip datoteke brez dodatne konfiguracije.

YAML format za nadzor izvorne kode

Ta format, uveden skupaj z integracijo Dataverse Git, shranjuje metapodatke rešitve kot YAML datoteke, razporejene po strukturirani hierarhiji map. To je format, ki se napiše, ko commitate rešitve z uporabo nativne Git integracije v Power Apps.

Prednosti pred XML formatom

  • Ustvarja čistejše in bolj berljive razlike za posamezne komponente v nadzoru izvorne kodo
  • Podpira več rešitev v eni mapi repozitorija
  • Datoteke aplikacij Canvas in .msapp sodobni tokovi so podprti le v tem formatu
  • Preslikava imen tipov vtičnikov je privzeto omogočena

Obvezna struktura map

<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]/

Pomembno

Format YAML je samodejno zaznan zaradi prisotnosti podmape, ki solutions/ vsebuje *solution.yml datoteke. Če so vaše YAML manifest datoteke (solution.yml, solutioncomponents.yml, in tako naprej) postavljene na koren mape namesto pod solutions/<SolutionUniqueName>/, orodje ne zazna YAML formata. Orodje se vrne k XML poti in poroča o zavajajoči napaki glede manjkajoče Customizations.xml. Za informacije o tem, kako odpraviti to težavo, glejte Odpravljanje težav.

Več informacij: Rešitev YAML referenčni format za nadzor izvorne kode

Pravila samodejnega zaznavanja formata

Pogoj Uporabljeni format
solutions/*/solution.yml najden — natanko eno rešitev YAML format, kjer se ime rešitve sklepa iz mape
solutions/*/solution.yml najdeno – več rešitev YAML format, kjer /SolutionName je argument potreben
Podimenik solutions/ ni prisoten XML format (dediščina)

Pakiranje mape v formatu YAML

Naslednji ukazni paketi vključujejo mapo v formatu YAML.

SolutionPackager.exe /action:Pack /zipfile:MySolution.zip /folder:C:\repos\myrepo

Pakiranje iz mape z več rešitvami

Naslednji ukaz zapakira določeno rešitev v mapo z več rešitvami.

SolutionPackager.exe /action:Pack /zipfile:SolutionA.zip /folder:C:\repos\myrepo /SolutionName:SolutionA

Uporaba argumenta ukaza /map

V naslednji razpravi je podrobno opisana uporaba argumenta /map v orodju SolutionPackager.

Datoteke, ki so vgrajene v sistem samodejne gradnje, kot so datoteke .xap Silverlight in sklopi vtičnikov, običajno niso preverjene v nadzoru izvorne kode. Spletni viri so morda že prisotni v nadzoru izvorne kode na lokacijah, ki niso neposredno združljive z orodjem SolutionPackager. Z vključitvijo parametra /map lahko orodje SolutionPackager usmerite k branju in pakiranju takšnih datotek z nadomestnih lokacij in ne iz mape za ekstrahiranje, kot je običajno. Parameter /map mora določati ime in pot do datoteke XML, ki vsebuje direktive za preslikavo. Te direktive naročijo SolutionPackagerju, naj poišče datoteke po imenu in poti ter navede alternativno lokacijo za iskanje ujemajoče se datoteke. Naslednji podatki veljajo enako za vse direktive.

  • Navedenih je lahko več direktiv, vključno s tistimi, ki ustrezajo enakim datotekam. Direktive, navedene na začetku datoteke, imajo prednost pred direktivami, navedenimi pozneje.

  • Če je datoteka povezana s katero koli direktivo, jo je treba najti na vsaj enem drugem mestu. Če ni najdenih ustreznih alternativ, SolutionPackager izda napako.

  • Poti do map in datotek so lahko absolutne ali relativne. Relativne poti se vedno ocenjujejo iz mape, ki jo določi parameter /folder.

  • Spremenljivke okolja se lahko določijo z uporabo sintakse %variable%.

  • Nadomestni znak mape "**" se lahko uporabi za pomen "v kateri koli podmapi". Uporabiti ga je mogoče le kot zadnji del poti, na primer: "c:\folderA\**".

  • Divje kartice za imena datotek se lahko uporabljajo le v oblikah "*.ext" ali "*.*". Drugi vzorci niso podprti.

    Tu so opisane tri vrste preslikav direktiv skupaj s primerom, ki prikazuje, kako jih uporabljati.

Preslikava mape

Naslednje informacije vsebujejo podrobne informacije o preslikavi map.

Oblika XML

<Folder map="folderA" to="folderB" />

Opis

Poti do datotek, ki ustrezajo "mapiA", se preklopijo na "mapo B".

  • Hierarhija podmap pod vsako se mora natančno ujemati.

  • Nadomestni znaki map niso podprti.

  • Imen datotek se ne sme določiti.

    Primeri

    <Folder map="folderA" to="folderB" />  
    <Folder map="folderA\folderB" to="..\..\folderC\" />  
    <Folder map="WebResources\subFolder" to="%base%\WebResources" />  
    

Preslikava iz datoteke v datoteko

Naslednje informacije vsebujejo več podrobnosti o preslikavi datotek v datoteke.

Oblika XML

<FileToFile map="path\filename.ext" to="path\filename.ext" />

Opis

Vsaka datoteka, ki ustreza parametru map , se prebere iz imena in poti, določene v parametru to .

Za parameter map:

  • Določiti morate ime datoteke. Pot ni obvezna. Če pot ni določena, se lahko povežejo datoteke iz katere koli mape.

  • Nadomestni znaki imen datotek niso podprti.

  • Nadomestni znak za mapo je podprt.

    Za parameter to:

  • Določiti morate ime datoteke in pot do nje.

  • Ime datoteke se lahko razlikuje od imena v parametru map.

  • Nadomestni znaki imen datotek niso podprti.

  • Nadomestni znak za mapo je podprt.

Primeri

  <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" /> 

V zgornjem primeru paketa NuGet se datoteka cr886_PluginPackageTest.nupkg ne prepiše, če datoteka že obstaja na določeni lokaciji.

Preslikava datoteke v pot

V nadaljevanju so navedene podrobne informacije o preslikavi iz datoteke v pot.

Oblika XML

<FileToPath map="path\filename.ext" to="path" />

Opis

Vsaka datoteka, ki ustreza parametru map, se prebere iz poti, določene v parametru to.

Za parameter map:

  • Določiti morate ime datoteke. Pot ni obvezna. Če pot ni določena, se lahko povežejo datoteke iz katere koli mape.

  • Nadomestni znaki za ime datoteke so podprti.

  • Nadomestni znak za mapo je podprt.

Za parameter to:

  • Določiti morate pot.

  • Nadomestni znak za mapo je podprt.

  • Imena datoteke ne smete določiti.

    Primeri

  <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" />  

Vzorčna preslikava

Naslednji vzorec kode XML prikazuje celotno datoteko preslikave, ki orodju SolutionPackager omogoča branje poljubnega spletnega vira in dveh privzetih ustvarjenih zbirov iz projekta Developer Toolkit, imenovanega 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>  

Upravljane in neupravljane rešitve

Datoteko (.zip) s stisnjeno rešitvijo Dataverse lahko izvozite v eno od dveh vrst, kot je prikazano tukaj.

Upravljana rešitev
Dokončana rešitev, pripravljena za uvoz v organizacijo. Ko so komponente uvožene, jih ni mogoče dodajati ali odstranjevati, čeprav omogočajo dodatne prilagoditve. To je priporočljivo, ko je razvoj rešitve končan.

Neupravljana rešitev
Odprta rešitev brez omejitev glede tega, kaj lahko dodate, odstranite ali spremenite. To je priporočljivo med razvojem rešitve.

Oblika datoteke s stisnjeno rešitvijo se bo razlikovala glede na vrsto, in sicer bo upravljana ali neupravljana. Orodje SolutionPackager lahko obdela datoteke s stisnjeno rešitvijo obeh vrst. Vendar orodje ne more pretvoriti enega tipa v drugega. Edini način pretvorbe datotek z rešitvami v drugo vrsto, na primer iz neupravljane v upravljano, je, da uvozite datoteko .zip z neupravljano rešitvijo v strežnik Dataverse in nato izvozite rešitev kot upravljano rešitev.

SolutionPackager lahko obdela datoteke .zip z neupravljano in upravljano rešitvijo kot kombiniran niz prek parametra /PackageType:Both. Če želite izvesti ta postopek, morate svojo rešitev izvoziti dvakrat kot vsako vrsto in poimenovati datoteke .zip, kot sledi.

Neupravljana datoteka .zip: AnyName.zip

Upravljana datoteka .zip: AnyName_managed.zip

Orodje bo predpostavljalo prisotnost upravljane datoteke .zip v isti mapi z neupravljano datoteko in ekstrahiralo obe datoteki v eno mapo, pri čemer bo ohranilo razlike, kjer obstajajo tako upravljane kot neupravljane komponente.

Ko je rešitev ekstrahirana tako kot neupravljana kot tudi upravljana, je mogoče iz te posamezne mape zapakirati obe ali vsako vrsto posebej s parametrom /PackageType, da določite, katero vrsto želite ustvariti. Če določite obe datoteki, bosta ustvarjeni dve datoteki .zip z uporabo zgoraj navedenega načina poimenovanja. Če parameter /PackageType manjka pri pakiranju iz dvojne, upravljane in neupravljane, mape, je privzeto ustvarjena ena neupravljana datoteka .zip.

Odpravljanje težav

Sporočilo, prikazano pri uporabi Visual Studio za urejanje datotek virov

Če uporabite Visual Studio za urejanje resource fsiles, ki jih je ustvaril paket rešitve, lahko ob prepakiranju prejmete sporočilo, podobno temu: "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." To se zgodi, ker Visual Studio zamenja metapodatkovne oznake datoteke z podatkovnimi oznakami.

Rešitev

  1. Odprite datoteko virov v svojem priljubljenem urejevalniku besedil ter poiščite in posodobite naslednje oznake:

    <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">  
    
    
  2. Spremenite ime vozlišča iz <data> v <metadata>.

    Na primer ta niz:

    <data name="Source LCID" xml:space="preserve">  
      <value>1033</value>  
    </data>  
    
    

    Se spremeni v:

    <metadata name="Source LCID" xml:space="preserve">  
      <value>1033</value>  
    </metadata>  
    
    

    To omogoča orodju za pakiranje rešitev branje in uvoz datoteke virov. Ta težava je bila opažena le pri uporabi urejevalnika virov Visual Studio.

Napaka: "Ni mogoče najti zahtevane datoteke ...\Other\Customizations.xml" z mapo YAML

Ta napaka se pojavi, ko zaženete SolutionPackager (ali pac solution pack) nad mapo, ki vsebuje YAML datoteke, kot je solution.yml, vendar so te datoteke postavljene na koren mape in ne v zahtevano podmapo.solutions/<SolutionUniqueName>/

Vzrok: Orodje zazna YAML format za nadzor izvorne kode tako, da poišče podmapo solutions/ z *solution.yml datotekami. Ko ta imenik ni prisoten, orodje tiho preide nazaj na XML (legacy) format in pričakuje Other\Customizations.xml. Nastalo sporočilo o napaki se nanaša na XML datoteko in ne omenja YAML, kar je zavajajoče.

Popravek: Preuredite mapo tako, da bodo datoteke manifesta YAML pod pravilnimi potmi:

<rootFolder>/
  solutions/<YourSolutionUniqueName>/   ← move solution.yml here
    solution.yml
    solutioncomponents.yml
    rootcomponents.yml
    missingdependencies.yml
  publishers/<YourPublisherUniqueName>/
    publisher.yml

Če si mapo pridobil iz Git integracijskega commita ali pac solution clone, bi morala biti struktura map že pravilna. Mapa, ki vsebuje le najvišje YAML datoteke brez podmape solutions/ , predstavlja nepopoln izvleček in je ni mogoče neposredno zapakirati.

Opozorilo: komponenta, deklarirana v rootcomponents.yml, nima izvornih datotek

To opozorilo se pojavi, ko je komponenta, kot je canvas aplikacija, navedena v rootcomponents.yml , vendar v pričakovani mapi komponent ni ustreznih izvornih datotek (na primer canvasapps/<schema-name>/).

Učinek: Orodje še vedno uspe (izhodna koda 0) in ustvari veljavno .zip datoteko, vendar je deklarirana komponenta izpuščena iz pakirane rešitve.

Vzrok: Mapa je bila ustvarjena z delno ekstrakcijo ali pa izvorne datoteke komponente niso bile vključene v repozitorij. Na primer, shranjene so bile le datoteke manifesta rešitve, ne pa tudi sama aplikacija Canvas.

Popravek: Poskrbite, da imajo vsi deklarirani rootcomponents.yml elementi ustrezne izvorne datoteke v mapi. Za canvas aplikacije mora datoteka .msapp obstajati pod .canvasapps/<schema-name>/ Če manjkajo kakšne datoteke, ponovno izvozite celotno rešitev iz Dataverse in jo ponovno razpakirajte ali uporabite pac solution clone za pridobitev popolne izvlečke.

Glejte tudi