Nota
O acceso a esta páxina require autorización. Pode tentar iniciar sesión ou modificar os directorios.
O acceso a esta páxina require autorización. Pode tentar modificar os directorios.
SolutionPackager é unha ferramenta que pode descompoñer reversiblemente un ficheiro de solución comprimida de Microsoft Dataverse en múltiples ficheiros XML e outros ficheiros. Despois, podes xestionar estes ficheiros facilmente usando un sistema de control de código fonte. As seguintes seccións mostran como executar a ferramenta e como usala con solucións administradas e non administradas.
Importante
A ferramenta SolutionPackager xa non é a forma recomendada de desempaquetar e empaquetar solucións. As capacidades da ferramenta SolutionPackager están incorporadas na CLI de Power Platform. O pac solution comando ten moitos verbos, incluíndo unpack, pack, clone, e sync que incorporan as mesmas capacidades subxacentes da ferramenta SolutionPackager.
Onde atopar a ferramenta SolutionPackager
A ferramenta SolutionPackager distribúese como parte do Microsoft. CrmSdk.CoreTools Paquete NuGet. Para instalar o programa, siga estes pasos.
- Descarga o paquete NuGet .
- Renomear a extensión do nome de ficheiro do paquete de .nupkg a .zip.
- Extrae o contido do ficheiro comprimido (zip).
Atopa o executábel SolutionPackager.exe no cartafol <nome-do-cartafol-extraído>/contents/bin/coretools. Executa o programa desde o cartafol coretools ou engade ese cartafol á túa PATH.
Argumentos da liña de comandos de SolutionPackager
SolutionPackager é unha ferramenta de liña de comandos que se pode invocar cos parámetros identificados na seguinte táboa.
| Argumento | Descripción |
|---|---|
| /acción: {Extracto|Paquete} | Requirido. Acción que se vai realizar. A acción pode ser extraer un ficheiro ZIP da solución a un cartafol ou empaquetar un cartafol nun ficheiro ZIP. |
| /zipfile: <ruta do ficheiro> | Requirido. Camiño e nome dun ficheiro .zip da solución. Ao extraer, o ficheiro debe existir e ser lexible. Ao empaquetar, o ficheiro substitúese. |
| /folder: <rota do cartafol> | Requirido. Camiño a un cartafol. Ao extraer, este cartafol créase e énchese con ficheiros de compoñentes. Ao empaquetar, este cartafol xa debe existir e conter ficheiros de compoñentes extraídos anteriormente. |
| /packagetype: {Non xestionado|Xestionado|Ambos} | Opcional. Tipo de paquete que se vai procesar. O valor predefinido é Unmanaged. Este argumento pode omitirse na maioría das ocasións porque o tipo de paquete pode lerse desde dentro do ficheiro .zip ou dos ficheiros de compoñentes. Á hora de extraer e Ambos se especifica, os ficheiros .zip das solucións xestionadas e non xestionadas deben estar presentes e procesalos nun único cartafol. Ao empaquetar e especificar Ambos, os ficheiros .zip da solución xestionada e non xestionada prodúcense a partir dun único cartafol. Para obter máis información, consulte a sección sobre como traballar con solucións xestionadas e non xestionadas máis adiante neste artigo. |
| /allowWrite:{Yes|No} | Opcional. O valor predefinido é Si. Este argumento úsase só durante unha extracción. Cando se especifica /allowWrite:No, a ferramenta realiza todas as operacións pero impídese escribir ou eliminar calquera ficheiro. Pódese avaliar con seguranza a operación de extracción sen sobrescribir nin eliminar ningún ficheiro existente. |
| /allowDelete:{Yes|No|Prompt} | Opcional. O valor predefinido é Prompt. Este argumento úsase só durante unha extracción. Cando se especifica /allowDelete:Yes, calquera ficheiro presente no cartafol especificado polo parámetro /folder que non sexa o esperado elimínase automaticamente. Cando se especifica /allowDelete:No, non se producen eliminacións. Cando se especifica /allowDelete:Prompt, a consola solicítalle ao usuario que permita ou denegue todas as operacións de eliminación. Se se especifica /allowWrite:No, non se producirán eliminacións mesmo se tamén se especifica /allowDelete:Yes. |
| /clobber | Opcional. Este argumento úsase só durante unha extracción. Cando se especifica /clobber, os ficheiros que teñen o atributo só de lectura son sobrescritos ou eliminados. Cando non se especifica, os ficheiros co atributo de só lectura non se sobrescriben nin eliminan. |
| /errorlevel: {Off|Erro|Aviso|Info|Verboso} | Opcional. O valor predefinido é Info. Este argumento indica o nivel de información de rexistro para a saída. |
| /map: <ruta do ficheiro> | Opcional. Camiño e nome dun ficheiro .xml que contén directivas sobre asignación de ficheiros. Cando se usa durante unha extracción, os ficheiros que normalmente se len dentro do cartafol especificado polo parámetro /folder lense desde localizacións alternativas segundo o especificado no ficheiro de asignación. Durante unha operación de pack, non se escriben os ficheiros que coinciden coas directivas. |
| /nologo | Opcional. Suprime a faixa en tempo de execución. |
| /log: <rota do ficheiro> | Opcional. Camiño e nome para un ficheiro de rexistro. Se o ficheiro xa existe, engádese nova información de rexistro. |
| @ <Rota do ficheiro> | Opcional. Camiño e nome para un ficheiro que contén argumentos de liña de comandos para a ferramenta. |
| /sourceLoc: <cadea> | Opcional. Este argumento xera un ficheiro de recursos de modelo e é válido só ao extraer. Os valores posibles son auto ou un código LCID ou ISO para o idioma que desexa exportar. Cando se usa este argumento, os recursos de cadea da configuración rexional extráense como un ficheiro .resx neutral. Se se especifica auto ou só a forma longa ou curta do conmutador, utilízase a configuración rexional base ou a solución. Pode usar a forma curta do comando: /src. |
| /localize | Opcional. Extraia ou combine todos os recursos de cadea en ficheiros .resx. Pode usar a forma curta do comando: /loc. A opción localizar admite compoñentes compartidos para ficheiros .resx. Máis información: Uso de recursos web RESX |
| /SolutionName: <nome> | Opcional. O nome único da solución a empaquetar ou extraer cando a carpeta fonte contén múltiples solucións baixo solutions/*/solution.yml. É necesario cando se detectan máis dunha solución. Só se aplica ao formato de control de versións YAML. Podes usar a forma curta do comando: /sn. |
| /remapPluginTypeNames | Opcional. Cando se especifica, os nomes de tipo totalmente cualificados dos plug-ins remapeanse baseándose nos conxuntos incluídos na solución. Activado por defecto no formato de control de versións YAML. Podes usar a forma curta do comando: /fp. |
Formatos de ficheiro de control de versións
SolutionPackager soporta a disposición de dúas carpetas ao extraer e empaquetar solucións.
Formato XML (legado)
O formato orixinal. Os metadatos da solución almacénanse en Other\Solution.xml e Other\Customizations.xml, e todos os ficheiros de compoñentes extráense nunha xerarquía plana de cartafoles xunto con eses ficheiros. Este formato é o predeterminado ao extraer un .zip ficheiro sen máis configuración.
Formato de control de versión YAML
Introducido xunto coa integración con Dataverse Git, este formato almacena metadatos da solución como ficheiros YAML distribuídos nunha xerarquía estruturada de cartafoles. É o formato escrito cando fas commit de solucións usando integración nativa con Git en Power Apps.
Vantaxes sobre o formato XML
- Produce diferenzas por compoñente máis limpas e lexibles no control de versións
- Soporta múltiples solucións nun único cartafol de repositorio
- Os ficheiros de aplicacións
.msappCanvas e os fluxos modernos só son compatibles neste formato - A reasignación do nome do tipo de complemento está activada por defecto
Estrutura de carpetas necesaria
<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]/
Importante
O formato YAML detéctese automaticamente pola presenza dunha solutions/ subcarpeta que contén *solution.yml ficheiros.
Se os teus ficheiros de manifestos YAML (solution.yml, solutioncomponents.yml, e así sucesivamente) están colocados na raíz do cartafol en lugar de baixo solutions/<SolutionUniqueName>/, a ferramenta non detecta o formato YAML. A ferramenta volve á ruta XML e informa dun erro enganoso sobre un erro faltante Customizations.xmlde . Consulta Resolución de problemas para obter información sobre como solucionar este problema.
Máis información: Referencia do formato de control de versión YAML da solución
Regras de detección automática de formato
| Condición | Formato utilizado |
|---|---|
solutions/*/solution.yml atopada — exactamente unha solución |
YAML, onde o nome da solución se infire do cartafol |
solutions/*/solution.yml atopado — múltiples solucións |
YAML, onde se require o /SolutionName argumento |
Non hai solutions/ subdirectorio |
Formato XML (legado) |
Empaquetando un cartafol con formato YAML
O seguinte comando empaqueta un cartafol en formato YAML.
SolutionPackager.exe /action:Pack /zipfile:MySolution.zip /folder:C:\repos\myrepo
Empaquetado desde un cartafol multi-solución
O seguinte comando empaqueta unha solución especificada nun cartafol multi-solución.
SolutionPackager.exe /action:Pack /zipfile:SolutionA.zip /folder:C:\repos\myrepo /SolutionName:SolutionA
Uso do argumento de comando /map
Na seguinte discusión detállase o uso do argumento /map na ferramenta SolutionPackager.
Normalmente, os ficheiros que se compilan nun sistema de compilación automatizado, como os ficheiros .xap de Silverlight e os ensamblados de complemento, non se comproban no control de orixe. É posible que os recursos web xa estean presentes no control de código fonte en localizacións que non son directamente compatibles coa ferramenta SolutionPackager. Ao incluír o parámetro /map, a ferramenta SolutionPackager pódese dirixir a ler e empaquetar tales ficheiros desde localizacións alternativas e non desde o cartafol Extract, como normalmente se faría. O parámetro /map debe especificar o nome e a ruta dun ficheiro XML que contén directivas de mapeo. Esas directivas indican a SolutionPackager que faga coincidir ficheiros polo seu nome e ruta e que indique a localización alternativa para atopar o ficheiro coincidente. A seguinte información aplícase a todas as directivas por igual.
Poden listarse varias directivas, incluídas aquelas que coincidan con ficheiros idénticos. As directivas listadas ao principio do ficheiro teñen prioridade sobre as directivas listadas máis tarde.
Se un ficheiro corresponde a algunha directiva, deberá atoparse en polo menos unha localización alternativa. Se non se atopan alternativas coincidentes, SolutionPackager emite un erro.
Os camiños de cartafoles e ficheiros poden ser absolutos ou relativos. Os camiños relativos sempre se avalían a partir do cartafol especificado polo parámetro /folder.
As variables de ambiente poden especificarse mediante unha sintaxe %variable%.
Un comodín de cartafol "**" pode usarse para significar "en calquera subcartafol". Só pode usarse como a parte final dun camiño, por exemplo: "c:\folderA\**".
As cartas comodíns de nome de ficheiro só poden usarse nas formas "*.ext" ou "*.*". Non se admite outro padrón.
Aquí descríbense os tres tipos de asignación de directivas, xunto cun exemplo que mostra como usalas.
Asignación de cartafoles
A seguinte información ofrece información detallada sobre o mapeo de cartafoles.
Formato XML
<Folder map="folderA" to="folderB" />
Descrición
Os camiños de ficheiro que coinciden con "folderA" cambian a "folderB".
A xerarquía dos subcartafoles en cada un debe coincidir exactamente.
Non se admiten comodíns de cartafol.
Non se poden especificar nomes de ficheiros.
Exemplos
<Folder map="folderA" to="folderB" /> <Folder map="folderA\folderB" to="..\..\folderC\" /> <Folder map="WebResources\subFolder" to="%base%\WebResources" />
Asignación de ficheiro a ficheiro
A seguinte información ofrece máis detalles sobre a correspondencia entre ficheiros.
Formato XML
<FileToFile map="path\filename.ext" to="path\filename.ext" />
Descrición
Calquera ficheiro que coincida co parámetro map léase desde o nome e a ruta especificados no parámetro to .
Para o parámetro map:
Cómpre especificar un nome de ficheiro. O camiño é opcional. Se non se especifica ningún camiño, poden coincidir ficheiros de calquera cartafol.
Non se admiten comodíns nos nomes de ficheiro.
O comodín de cartafol é compatible.
Para o parámetro
to:Cómpre especificar un nome de ficheiro e un camiño.
O nome do ficheiro pode diferir do nome no parámetro
map.Non se admiten comodíns nos nomes de ficheiro.
O comodín de cartafol é compatible.
Exemplos
<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" />
No exemplo de paquete anterior, cr886_PluginPackageTest.nupkg non se sobrescribe se o ficheiro xa existe na localización especificada. NuGet
Asignación de ficheiro a camiño
A continuación ofrécese información detallada sobre a asignación de ficheiro a camiño.
Formato XML
<FileToPath map="path\filename.ext" to="path" />
Descrición
Calquera ficheiro que corresponda co parámetro map lese a partir do camiño especificado no parámetro to.
Para o parámetro map:
Cómpre especificar un nome de ficheiro. O camiño é opcional. Se non se especifica ningún camiño, poden coincidir ficheiros de calquera cartafol.
Os comodíns de nomes de ficheiros son compatibles.
O comodín de cartafol é compatible.
Para o parámetro to:
Cómpre especificar un camiño.
O comodín de cartafol é compatible.
Non debe especificarse un nome de ficheiro.
Exemplos
<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" />
Exemplos de asignación
O seguinte exemplo de código XML mostra un ficheiro de asignación completo que permite á ferramenta SolutionPackager ler calquera recurso web e os dous ensamblados predefinidos xerados a partir dun proxecto de ferramentas para programadores chamado 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>
Solucións xestionadas e non xestionadas
O ficheiro de solución comprimido (.zip) de Dataverse pódese exportar nun dos tipos como se mostra aquí.
Solución xestionada
Unha solución completa lista para ser importada nunha organización. Unha vez importados, os compoñentes non se poden engadir nin eliminar, aínda que opcionalmente permiten unha personalización adicional. Isto é recomendable cando o desenvolvemento da solución estea completo.
Solución non xestionada
Unha solución aberta sen restricións na que se pode engadir, eliminar ou modificar. Isto é recomendable durante o desenvolvemento dunha solución.
O formato dun ficheiro de solucións comprimido será diferente en función do seu tipo, xa sexa xestionado ou non xestionado. SolutionPackager pode procesar ficheiros de solucións comprimidos de calquera tipo. Porén, a ferramenta non pode converter un tipo a outro. A única forma de converter ficheiros de solución a outro tipo, por exemplo de non xestionado a xestionado, é importar o ficheiro .zip de solución non xestionada a un servidor de Dataverse e despois exportar a solución como solución administrada.
SolutionPackager pode procesar ficheiros .zip de solucións xestionadas e non xestionadas como un conxunto combinado a través do parámetro /PackageType:Both. Para realizar esta operación, é necesario exportar a súa solución dúas veces por cada tipo, nomeando os ficheiros .zip do seguinte xeito.
Ficheiro .zip non xestionado: AnyName.zip
Ficheiro .zip xestionado: AnyName_managed.zip
A ferramenta asumirá a presenza do ficheiro .zip xestionado no mesmo cartafol que o ficheiro non xestionado e extraerá os dous ficheiros nun único cartafol preservando as diferenzas onde existen compoñentes xestionados e non xestionados.
Despois de extraer unha solución como non xestionada e xestionada, é posible que desde ese cartafol único poida empaquetar ambas, ou cada tipo individualmente, usando o parámetro /PackageType para especificar que tipo crear. Ao especificar ambos ficheiros, xeraranse dous ficheiros .zip usando a convención de nomenclatura anterior. Se falta o parámetro /PackageType cando se empaqueta desde un cartafol xestionado e sen xestionar dual, o valor predefinido é producir un único ficheiro .zip sen xestionar.
Resolución de problemas
Mensaxe mostrada ao usar Visual Studio para editar ficheiros de recursos
Se usas Visual Studio para editar fsiles de recursos creados polo empaquetador da solución, podes recibir unha mensaxe similar ao reempaquetar: "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." Isto ocorre porque Visual Studio substitúe as etiquetas de metadatos do ficheiro de recurso por etiquetas de datos.
Outros métodos
Abra o ficheiro de recursos no editor de texto favorito e localice e actualice as seguintes etiquetas:
<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">Modifique o nome do nó de
<data>a<metadata>.Por exemplo, esta cadea:
<data name="Source LCID" xml:space="preserve"> <value>1033</value> </data>Modifícase a:
<metadata name="Source LCID" xml:space="preserve"> <value>1033</value> </metadata>Isto permite que o empaquetador de solucións lea e importe o ficheiro de recursos. Este problema só se observou ao usar o editor de recursos de Visual Studio.
Erro: "Non se pode atopar o ficheiro requerido ...\Other\Customizations.xml" cun cartafol YAML
Este erro aparece cando executas SolutionPackager (ou pac solution pack) contra unha carpeta que contén ficheiros YAML como solution.yml, pero eses ficheiros colócanse na raíz da carpeta en lugar de dentro da subcarpeta requirida solutions/<SolutionUniqueName>/ .
Causa: A ferramenta detecta o formato de control de versións YAML buscando unha solutions/ subcarpeta que contén *solution.yml ficheiros. Cando ese directorio está ausente, a ferramenta volve silenciosamente ao formato XML (legacy) e espera Other\Customizations.xml. A mensaxe de erro resultante refírese a un ficheiro XML e non menciona YAML, o que é enganoso.
Solución: Reorganiza o cartafol para que os ficheiros do manifesto YAML estean nos camiños correctos:
<rootFolder>/
solutions/<YourSolutionUniqueName>/ ← move solution.yml here
solution.yml
solutioncomponents.yml
rootcomponents.yml
missingdependencies.yml
publishers/<YourPublisherUniqueName>/
publisher.yml
Se obtiveches a carpeta a partir dun commit de integración de Git ou pac solution clone, a estrutura de cartafoles xa debería ser correcta. Un cartafol que só contén os ficheiros YAML de nivel superior sen o solutions/ subdirectorio representa unha extracción incompleta e non se pode empaquetar directamente.
Aviso: compoñente declarado en rootcomponents.yml non ten ficheiros fonte
Esta advertencia aparece cando un compoñente, como unha aplicación canvas, está listado en rootcomponents.yml pero non existen ficheiros fonte correspondentes na carpeta de compoñentes esperados (por exemplo, canvasapps/<schema-name>/).
Efecto: A ferramenta segue tendo éxito (código de saída 0) e produce un ficheiro válido .zip , pero o compoñente declarado queda omitido da solución empaquetada.
Causa: O cartafol producíase por unha extracción parcial, ou os ficheiros fonte do compoñente non estaban incluídos no repositorio. Por exemplo, só se comprometían os ficheiros manifest da solución e non a propia aplicación canvas.
Solución: Asegúrate de que todos os compoñentes declarados teñan rootcomponents.yml os ficheiros fonte correspondentes presentes no cartafol. Para aplicacións de canvas, o ficheiro .msapp debe existir baixo canvasapps/<schema-name>/. Se falta algún ficheiro, reexporta a solución completa desde Dataverse e desempaca de novo, ou úsaa pac solution clone para obter unha extracción completa.