Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Este tema se aplica a Dynamics 365 Customer Engagement (on-premises). Para obtener información sobre la versión de Power Apps de este tema, consulte: Herramienta SolutionPackager
SolutionPackager es una herramienta que puede descomponer de forma reversible un archivo de solución comprimido de Dynamics 365 Customer Engagement (on-premises) en varios archivos XML y otros archivos para que un sistema de control de código fuente pueda administrar fácilmente estos archivos. En las secciones siguientes se muestra cómo ejecutar la herramienta y cómo usarla con soluciones administradas y no administradas.
Dónde encontrar la herramienta SolutionPackager
La herramienta SolutionPackager se distribuye como parte del paquete NuGet Microsoft.CrmSdk.CoreTools . Consulte Herramientas de desarrollo de Dataverse para obtener información sobre cómo descargarlo.
Argumentos de la línea de comandos de SolutionPackager
SolutionPackager es una herramienta de línea de comandos que se puede invocar con los parámetros identificados en la tabla siguiente.
Argumento | Descripción |
---|---|
/Acción: {Extraer|Empaquetar} | Obligatorio. La acción a realizar. La acción puede ser ya sea extraer un archivo solución .zip en una carpeta, o comprimir una carpeta en un archivo .zip. |
/zipfile: <ruta del archivo> | Obligatorio. El nombre y la ruta de un archivo de solución .zip. Al extraer, el archivo debe existir y se leerá desde él. Al comprimir, se reemplaza el archivo. |
/folder: <ruta de la carpeta> | Obligatorio. Ruta de acceso a una carpeta. Al extraer, esta carpeta se crea y se rellena con archivos de componentes. Al empaquetar, esta carpeta ya debe existir y contener archivos de componentes extraídos anteriormente. |
/packagetype: {No administrado|Gestionado|Ambos} | Opcional. El tipo de paquete que se va a procesar. El valor predeterminado es Unmanaged. Este argumento se puede omitir en la mayoría de las ocasiones porque el tipo de paquete se puede leer desde dentro del archivo .zip o los archivos de componentes. Cuando se extrae y se especifica Both, los archivos .zip de solución administrada y no administrada deben estar presentes y procesarse en una sola carpeta. Cuando se comprime y se especifica Both, los archivos .zip de solución administrada y no administrada se crearán desde una carpeta. Para obtener más información, consulte la sección sobre cómo trabajar con soluciones administradas y no administradas más adelante en este tema. |
/allowWrite:{Sí|No} | Opcional. El valor predeterminado es Sí. Este argumento solo se utiliza durante una extracción. Cuando se especifica /allowWrite:No, la herramienta realiza todas las operaciones, pero se le impide escribir o eliminar ningún archivo. La operación de extracción se puede evaluar de forma segura sin sobrescribir ni eliminar ningún archivo existente. |
/allowDelete:{Yes|No|Prompt} | Opcional. El valor predeterminado es Prompt. Este argumento solo se utiliza durante una extracción. Cuando se especifica /allowDelete:Yes, se eliminan automáticamente todos los archivos presentes en la carpeta especificada por el parámetro /folder que no se esperan. Cuando se especifica /allowDelete:No, no se producirá ninguna eliminación. Cuando se especifica /allowDelete:Prompt, se solicita al usuario a través de la consola que permita o deniegue todas las operaciones de eliminación. Tenga en cuenta que si se especifica /allowWrite:No, no se producirá ninguna eliminación, incluso si también se especifica /allowDelete:Yes. |
/clobber | Opcional. Este argumento solo se utiliza durante una extracción. Cuando se especifica /clobber, los archivos que tienen el atributo de solo lectura establecido se sobrescriben o eliminan. Cuando no se especifica, los archivos con el atributo de solo lectura no se sobrescriben ni se eliminan. |
/errorlevel: {Off|Error|Warning|Info|Verbose} | Opcional. El valor predeterminado es Info. Este argumento indica el nivel de información del registro para el resultado. |
/map: <ruta del archivo> | Opcional. La ruta y el nombre de un archivo .xml que contiene directivas de asignación de archivos. Cuando se utilizan durante una extracción, los archivos que normalmente se leen desde dentro de la carpeta especificada por el parámetro /folder se leen desde ubicaciones alternativas según lo especificado en el archivo de asignación. Durante la operación de compresión, los archivos que coinciden con las directivas no se escriben. |
/nologo | Opcional. Suprima el banner en tiempo de ejecución. |
/log: <ruta del archivo> | Opcional. Una ruta y un nombre a un archivo de registro. Si el archivo ya existe, se anexa nueva información de registro al archivo. |
<@ ruta del archivo> | Opcional. Ruta y nombre de un archivo que contiene argumentos de línea de comandos para la herramienta. |
/sourceLoc: <cadena> | Opcional. Este argumento genera un archivo de recursos de plantilla y solo es válido en la extracción. Los valores posibles son auto o un código LCID/ISO para el idioma que desea exportar. Cuando se utiliza este argumento, los recursos de cadena de la configuración regional especificada se extraen como un archivo .resx neutro. Si auto o la forma larga o corta del cambio se especifica, se utilizan el local base o la solución. Puede utilizar la forma abreviada del comando: /src. |
/localize | Opcional. Extraiga o combine todos los recursos de cadena en los archivos de .resx. Puede usar la forma abreviada del comando: /loc. |
Utilice el argumento de comando /map
En la siguiente explicación se detalla el uso del argumento /map en la herramienta SolutionPackager.
Normalmente, los archivos que se compilan en un sistema de compilación automatizado, como los archivos .xap de Silverlight y los ensamblados de complementos, generalmente no se registran en el control de versiones. Es posible que los recursos web ya estén presentes en el control de código fuente en ubicaciones que no son directamente compatibles con la herramienta SolutionPackager. Al incluir el parámetro /map, se puede dirigir a la herramienta SolutionPackager para que lea y empaquete dichos archivos desde ubicaciones alternativas y no desde dentro de la carpeta Extract como se haría normalmente. El parámetro /map debe especificar el nombre y la ruta de acceso a un archivo XML que contenga directivas de asignación que indiquen a SolutionPackager que empareje los archivos por su nombre y su ruta de acceso, e indique la ubicación alternativa para encontrar el archivo coincidente. La siguiente información se aplica a todas las directivas por igual.
Es posible que se enumeren varias directivas, incluidas las que coincidan con archivos idénticos. Las directivas enumeradas al principio del archivo tienen prioridad sobre las enumeradas más adelante.
Si un archivo coincide con alguna directiva, debe encontrarse en al menos una ubicación alternativa. Si no se encuentran alternativas coincidentes, SolutionPackager emitirá un error.
Las rutas de acceso de carpetas y archivos pueden ser absolutas o relativas. Las rutas de acceso relativas siempre se evalúan desde la carpeta especificada por el parámetro /folder.
Las variables de entorno se pueden especificar mediante una sintaxis %variable%.
Se puede utilizar un comodín de carpeta "**" para indicar "en cualquier subcarpeta". Solo se puede utilizar como parte final de una ruta, por ejemplo: "c:\folderA\**".
Los comodines de nombre de archivo se pueden usar únicamente en las formas “*.ext” o “*.*”. No se admite ningún otro patrón.
Aquí se describen los tres tipos de asignaciones de las directivas, junto con un ejemplo que muestra cómo puede usarlos.
Mapeo de carpetas
A continuación se ofrece información detallada sobre la asignación de carpetas.
Formato XML
<Folder map="folderA" to="folderB" />
Descripción
Las rutas de archivo que coincidan con "carpeta A" se cambiarán a "carpeta B".
La jerarquía de subcarpetas bajo cada una debe coincidir exactamente.
No se admiten los comodines de carpeta.
No se pueden especificar nombres de archivo.
Ejemplos
<Folder map="folderA" to="folderB" /> <Folder map="folderA\folderB" to="..\..\folderC\" /> <Folder map="WebResources\subFolder" to="%base%\WebResources" />
Asignación de archivo a archivo
A continuación se muestra información detallada sobre asignación de archivo a archivo.
Formato XML
<FileToFile map="path\filename.ext" to="path\filename.ext" />
Descripción
Cualquier archivo que coincida con el map
parámetro se leerá desde el nombre y la ruta especificados en el to
parámetro.
Para el map
parámetro :
Se debe especificar un nombre de archivo. La ruta es opcional. Si no se especifica ninguna ruta de acceso, es posible que coincidan los archivos de cualquier carpeta.
No se admiten los comodines de nombre de archivo.
Se admite el comodín de la carpeta.
Para el
to
parámetro :Se debe especificar un nombre de archivo y una ruta de acceso.
El nombre del archivo puede diferir del nombre del
map
parámetro.No se admiten los comodines de nombre de archivo.
Se admite el comodín de la carpeta.
Ejemplos
<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" />
Tenga en cuenta que en el ejemplo de paquete NuGet anterior, cr886_PluginPackageTest.nupkg no se sobrescribe si el archivo ya existe en la ubicación especificada.
Asignación de archivo a ruta
A continuación se muestra información detallada sobre asignación de archivo a ruta.
Formato XML
<FileToPath map="path\filename.ext" to="path" />
Descripción
Cualquier archivo que coincida con el map
parámetro se lee desde la ruta especificada en el to
parámetro.
Para el map
parámetro :
Se debe especificar un nombre de archivo. La ruta es opcional. Si no se especifica ninguna ruta de acceso, es posible que coincidan los archivos de cualquier carpeta.
Se admiten los comodines de nombre de archivo.
Se admite el comodín de la carpeta.
Para el
to
parámetro :Se debe especificar una ruta de acceso.
Se admite el comodín de la carpeta.
No se debe especificar un nombre de archivo.
Ejemplos
<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" />
Ejemplo de mapeo
En el siguiente ejemplo de código XML se muestra un archivo de asignación completo que permite a la herramienta SolutionPackager leer cualquier recurso web y los dos ensamblados generados de forma predeterminada de un proyecto de Developer Toolkit denominado 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 sub-folders -->
<FileToPath map="WebResources\*.*" to="..\..\CrmPackage\WebResources\**" />
<FileToPath map="WebResources\**\*.*" to="..\..\CrmPackage\WebResources\**" />
</Mapping>
Soluciones administradas y no administradas
Un archivo de solución comprimida (.zip) de Dynamics 365 Customer Engagement (on-premises) se puede exportar en uno de dos tipos, como se muestra aquí.
Solución gestionada
Una solución completada lista para ser importada a una organización. Una vez importados, los componentes no se pueden agregar ni eliminar, aunque opcionalmente pueden permitir una mayor personalización. Esto se recomienda cuando se ha completado el desarrollo de la solución.
Solución no administrada
Una solución abierta sin restricciones sobre lo que se puede agregar, quitar o modificar. Esto se recomienda durante el desarrollo de una solución.
El formato de un archivo de solución comprimido será diferente en función de su tipo, ya sea administrado o no administrado. SolutionPackager puede procesar archivos de solución comprimidos de cualquier tipo. Sin embargo, la herramienta no puede convertir un tipo en otro. La única manera de convertir los archivos de solución a un tipo diferente, por ejemplo, de no administrado a administrado, es importar el archivo de .zip de solución no administrado en un servidor de Dynamics 365 Server y, a continuación, exportar la solución como una solución administrada.
SolutionPackager puede procesar archivos de soluciones gestionadas y no gestionadas tipo .zip como un conjunto combinado mediante el parámetro /PackageType:Both. Para realizar esta operación, es necesario exportar la solución dos veces como cada tipo, nombrando los archivos .zip de la siguiente manera.
- Unmanaged .zip file: AnyName.zip
- Managed .zip file: AnyName_managed.zip
La herramienta asumirá la presencia del archivo zip administrado en la misma carpeta que el archivo no administrado y extraerá ambos archivos en una sola carpeta, conservando las diferencias donde existen componentes administrados y no administrados.
Una vez que se ha extraído una solución como administrada y no administrada, es posible empaquetar desde esa única carpeta ambas o cada tipo individualmente, mediante el parámetro /PackageType para especificar el tipo que se va a crear. Al especificar ambos, se generarán dos archivos .zip utilizando la convención de nomenclatura anterior. Si falta el parámetro /PackageType al empaquetar desde una carpeta doble administrada y no administrada, el valor predeterminado es generar un único archivo .zip no administrado.
Solución de problemas
Si usa Visual Studio 2012 para editar archivos de recursos creados por el empaquetador de soluciones, es posible que reciba un mensaje similar al siguiente: “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.”
Esto sucede porque Visual Studio reemplaza las etiquetas de metadatos del archivo de recursos por etiquetas de datos.
Solución
Abra el archivo de recursos en su editor de texto favorito y localice y actualice las siguientes 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">
Cambie el nombre del nodo de
<data>
a<metadata>
.Por ejemplo, esta cadena:
<data name="Source LCID" xml:space="preserve"> <value>1033</value> </data>
Cambia a:
<metadata name="Source LCID" xml:space="preserve"> <value>1033</value> </metadata>
Esto permite que el empaquetador de soluciones lea e importe el archivo de recursos. Este problema solo se ha observado al usar el editor de recursos de Visual Studio.
Consulte también
Herramientas de solución para el desarrollo de equipos
Usar el control de código fuente con archivos de solución
Introducción a soluciones