Alat SolutionPackager
SolutionPackager adalah alat yang dapat secara reversibel menguraikan Microsoft Dataverse file solusi terkompresi menjadi beberapa file XML dan file lainnya. Anda kemudian dapat dengan mudah mengelola file-file ini dengan menggunakan sistem kontrol sumber. Bagian berikut ini menunjukkan cara menjalankan alat dan cara menggunakan alat dengan solusi terkelola dan tidak terkelola.
Penting
Alat SolutionPackager bukan lagi cara yang direkomendasikan untuk membongkar dan mengemas solusi. Kemampuan alat SolutionPackager telah dimasukkan ke dalam Power Platform CLI. Perintah ini pac solution
memiliki sejumlah kata kerja termasuk unpack
, pack
, clone
, dan sync
yang menggabungkan kemampuan dasar yang sama dari alat SolutionPackager.
Lokasi menemukan alat SolutionPackager
Alat SolutionPackager didistribusikan sebagai bagian dari Microsoft. Paket CrmSdk.CoreTools NuGet . Untuk menginstal program, ikuti langkah-langkah berikut.
- Unduh paketnya NuGet .
- Ganti nama ekstensi nama file paket dari .nupkg menjadi .zip.
- Ekstrak konten file terkompresi (zip).
Temukan SolutionPackager.exe yang dapat dieksekusi di folder extracted-folder-name <>/contents/bin/coretools. Jalankan program dari folder coretools atau tambahkan folder itu ke PATH Anda.
Argumen baris perintah SolutionPackager
SolutionPackager adalah alat baris perintah yang dapat dijalankan dengan parameter yang diidentifikasi dalam tabel berikut.
Argumen | Description |
---|---|
/action: {Extract|Pack} | Harus diisi. Tindakan untuk dilakukan. Tindakan ini dapat berupa mengekstrak file Solution.zip ke folder, atau untuk mengemas folder ke dalam file .zip. |
/zipfile: <file path> | Harus diisi. Jalur dan nama file Solution.zip. Saat mengekstrak, file harus ada dan dapat dibaca. Saat mengemas, file akan diganti. |
/folder: <folder path> | Harus diisi. Jalur ke folder. Saat mengekstrak, folder ini dibuat dan diisi dengan file komponen. Saat mengemas, folder ini harus sudah ada dan berisi file komponen yang diekstrak sebelumnya. |
/packagetype: {Unmanaged|Managed|Both} | Opsional. Jenis paket untuk diproses. Nilai default adalah Tidak terkelola. Argumen ini mungkin dihilangkan dalam banyak kesempatan karena jenis paket dapat dibaca dari dalam file .zip atau file komponen. Saat mengekstrak dan keduanya ditentukan, file .zip solusi yang terkelola dan tidak terkelola harus ada dan diproses menjadi satu folder. Saat mengemas dan Keduanya ditentukan, file .zip solusi terkelola dan tidak terkelola dihasilkan dari satu folder. Untuk informasi selengkapnya, lihat bagian tentang bekerja dengan solusi terkelola dan tidak terkelola nanti di artikel ini. |
/allowWrite:{Yes|No} | Opsional. Nilai default adalah Ya. Argumen ini hanya digunakan selama ekstraksi. Bila/allowWrite:No ditentukan, alat melakukan semua operasi namun dicegah untuk menulis atau menghapus file apa pun. Operasi ekstrak dapat dinilai dengan aman tanpa menimpa atau menghapus file yang ada. |
/allowDelete:{Yes|No|Prompt} | Opsional. Nilai default adalah Prompt. Argumen ini hanya digunakan selama ekstraksi. Ketika /allowDelete:Ya ditentukan, file apa pun yang ada di folder yang ditentukan oleh parameter /folder yang tidak diharapkan akan dihapus secara otomatis. Ketika /allowDelete:No ditentukan, tidak ada penghapusan yang terjadi. Bila/allowDelete:Prompt ditentukan, pengguna akan diminta melalui konsol untuk membolehkan atau menolak semua operasi penghapusan. Jika /allowWrite:No ditentukan, tidak ada penghapusan yang terjadi meskipun /allowDelete:Yes juga ditentukan. |
/clobber | Opsional. Argumen ini hanya digunakan selama ekstraksi. Bila/clobber ditentukan, file yang memiliki rangkaian atribut baca-saja akan ditimpa atau dihapus. Bila tidak ditentukan, file dengan atribut baca-saja tidak akan ditimpa atau dihapus. |
/errorlevel: {Off|Error|Warning|Info|Verbose} | Opsional. Nilai default adalah Info. Argumen ini menunjukkan tingkat pencatatan informasi ke output. |
/map: <file path> | Opsional. Jalur dan nama file .xml yang berisi perintah pemetaan file. Bila digunakan selama ekstraksi, file yang biasanya dibaca dari dalam folder yang ditentukan oleh parameter /folder dibaca dari lokasi alternatif sebagaimana ditentukan dalam file pemetaan. Selama operasi paket, file yang cocok dengan perintah tidak ditulis. |
/nologo | Opsional. Menekan spanduk saat runtime. |
/log: <file path> | Opsional. Jalur dan nama ke file log. Jika file sudah ada, informasi Logging baru ditambahkan ke file. |
@ <file path> | Opsional. Jalur dan nama ke file yang berisi argumen baris perintah untuk alat. |
/sourceLoc: <string> | Opsional. Argumen ini menghasilkan file sumber daya template, dan hanya berlaku saat ekstraksi. Nilai yang mungkin adalah auto atau kode LCID/ISO untuk bahasa yang ingin diekspor. Bila argumen ini digunakan, sumber string dari lokal yang diberikan diekstrak sebagai file Neutral .resx. Jika auto atau hanya bentuk panjang atau pendek peralihan ditentukan, lokal dasar atau solusi digunakan. Anda dapat menggunakan formulir singkat perintah: /src. |
/localize | Opsional. Ekstrak atau gabungkan semua sumber daya string ke dalam file .resx. Anda dapat menggunakan formulir singkat perintah: /loc. Pilihan lokalisasi mendukung komponen bersama untuk file .resx. Informasi lebih lanjut: Menggunakan sumber daya web RESX |
Gunakan argumen perintah /map
Diskusi berikut merinci penggunaan argumen /map untuk alat SolutionPackager.
File yang dibuat dalam sistem pembuatan otomatis, seperti file .xap Silverlight dan assembly plug-in, biasanya tidak dimasukkan ke kontrol sumber. Sumber daya web mungkin sudah ada dalam kontrol sumber di lokasi yang tidak kompatibel secara langsung dengan alat SolutionPackager. Dengan menyertakan parameter /map, alat SolutionPackager dapat diarahkan untuk membaca dan mengemas file tersebut dari lokasi alternatif dan tidak di dalam folder ekstrak seperti yang biasanya dilakukan. Parameter /map harus menentukan nama dan jalur ke file XML yang berisi direktif pemetaan. Direktif tersebut menginstruksikan SolutionPackager untuk mencocokkan file dengan nama dan jalurnya, dan menunjukkan lokasi alternatif untuk menemukan file yang cocok. Informasi berikut berlaku untuk semua arahan yang sama.
Beberapa arahan dapat dicantumkan termasuk arahan yang cocok dengan file yang identik. Arahan yang tercantum di awal file lebih diutamakan daripada arahan yang tercantum kemudian.
Jika file dicocokkan dengan arahan apa pun, maka file tersebut harus ditemukan di setidaknya satu lokasi alternatif. Jika tidak ada alternatif yang cocok yang ditemukan, SolutionPackager mengeluarkan kesalahan.
Jalur folder dan file mungkin mutlak atau relatif. Jalur relatif selalu dievaluasi dari folder yang ditentukan oleh parameter /folder.
Variabel lingkungan dapat ditentukan dengan menggunakan sintaks %variable%.
Wildcard folder "**" dapat digunakan untuk berarti "di subfolder apa pun". Ini hanya dapat digunakan sebagai bagian akhir dari jalur, misalnya: "c:\folderA\"**.
Tanda wildcard nama file hanya dapat digunakan dalam bentuk “*.ext” atau “*.*”. Tidak ada pola lain yang didukung.
Tiga jenis pemetaan arahan dijelaskan di sini, bersama dengan contoh yang menunjukkan cara menggunakannya.
Pemetaan folder
Informasi berikut memberikan informasi terperinci tentang pemetaan folder.
Xml Format
<Folder map="folderA" to="folderB" />
Keterangan
Jalur file yang cocok dengan "folderA" dialihkan ke "folderB".
Hierarki subfolder di bawah masing-masing harus sama persis.
Wildcard folder tidak didukung.
Tidak ada nama file yang dapat ditentukan.
Contoh
<Folder map="folderA" to="folderB" /> <Folder map="folderA\folderB" to="..\..\folderC\" /> <Folder map="WebResources\subFolder" to="%base%\WebResources" />
Pemetaan File ke file
Informasi berikut memberikan detail lebih lanjut tentang pemetaan file-ke-file.
Xml Format
<FileToFile map="path\filename.ext" to="path\filename.ext" />
Keterangan
File apa pun yang cocok dengan map
parameter dibaca dari nama dan jalur yang ditentukan dalam to
parameter.
Untuk parameter map
:
Nama file harus ditentukan. Jalur ini opsional. Jika tidak ada jalur yang ditentukan, file dari folder mungkin dicocokkan.
Wildcard nama file tidak didukung.
Wildcard folder didukung.
Untuk parameter
to
:Nama file dan jalur harus ditentukan.
Nama file mungkin berbeda dari nama dalam parameter
map
.Wildcard nama file tidak didukung.
Wildcard folder didukung.
Contoh
<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" />
Dalam contoh paket di atas NuGet , cr886_PluginPackageTest.nupkg tidak ditimpa jika file sudah ada di lokasi yang ditentukan.
Pemetaan file ke jalur
Berikut menyediakan informasi rinci tentang pemetaan file ke jalur.
Xml Format
<FileToPath map="path\filename.ext" to="path" />
Keterangan
File yang cocok dengan parameter map
dibaca dari jalur yang ditentukan dalam parameter to
.
Untuk parameter map
:
Nama file harus ditentukan. Jalur ini opsional. Jika tidak ada jalur yang ditentukan, file dari folder mungkin dicocokkan.
Wildcard nama file didukung.
Wildcard folder didukung.
Untuk parameter to
:
Jalur harus ditentukan.
Wildcard folder didukung.
Nama file tidak boleh ditentukan.
Contoh
<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" />
Contoh pemetaan
Sampel kode XML berikut menunjukkan file pemetaan lengkap yang mengaktifkan alat SolutionPackager untuk membaca sumber daya web dan dua assembly yang dihasilkan secara default dari proyek toolkit pengembang bernama 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>
Solusi terkelola dan tidak terkelola
File solusi terkompresi Dataverse (.zip) dapat diekspor dalam salah satu dari dua jenis seperti yang ditunjukkan di sini.
solusi terkelola
Solusi lengkap siap diimpor ke organisasi. Setelah diimpor, komponen tidak dapat ditambahkan atau dihapus, meskipun dapat disesuaikan secara opsional. Ini direkomendasikan bila pengembangan solusi selesai.
Solusi yang tidak dikelola
Solusi terbuka tanpa batasan pada apa yang dapat ditambahkan, dihapus, atau dimodifikasi. Ini disarankan selama pengembangan solusi.
Format file solusi terkompresi akan berbeda berdasarkan jenisnya, baik terkelola maupun tidak terkelola. SolutionPackager dapat memproses file solusi terkompresi dari kedua jenis. Namun, alat tidak dapat mengonversi satu jenis ke lainnya. Satu-satunya cara untuk mengkonversi file solusi ke jenis yang berbeda, misalnya dari tidak terkelola ke terkelola, adalah dengan mengimpor file .zip solusi tidak terkelola solution ke server Dataverse dan kemudian mengekspor solusi sebagai solusi terkelola.
Solutionpackager dapat memproses file yang tidak dikelola dan solusi terkelola .zip sebagai bundel yang digabungkan melalui parameter /packagetype:Both. Untuk melakukan operasi ini, Anda perlu mengekspor solusi dua kali sebagai masing-masing jenis, dengan menamai file .zip sebagai berikut.
File .zip yang tidak dikelola: AnyName.zip | File .zip yang dikelola: AnyName_managed.zip |
Alat akan mengasumsikan adanya file zip terkelola di folder yang sama dengan file yang tidak dikelola dan mengekstrak kedua file ke dalam satu folder yang mempertahankan perbedaan di mana komponen terkelola dan tidak terkelola ada.
Setelah solusi diekstrak sebagai tidak terkelola dan dikelola, dimungkinkan dari satu folder itu untuk mengemas keduanya, atau masing-masing jenis secara individual menggunakan parameter /PackageType untuk menentukan jenis yang akan dibuat. Saat menentukan kedua file, dua file .zip akan dihasilkan menggunakan konvensi penamaan seperti di atas. Jika parameter /PackageType hilang saat pengemasan dari folder tak terkelola dan terkelola ganda, maka default adalah untuk menghasilkan file .zip tunggal yang tidak dikelola.
Penyelesaian Masalah
Jika Anda menggunakan Visual Studio untuk mengedit file sumber daya yang dibuat oleh solusi Packager, Anda mungkin menerima pesan saat mengemas ulang yang serupa dengan ini: “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.”
ini terjadi karena Visual Studio menggantikan Tag metadata file sumber daya dengan tag data.
Solusi
Buka file sumber daya di editor teks favorit Anda, lalu temukan dan perbarui Tag berikut:
<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">
Ubah nama node dari
<data>
ke<metadata>
.Misalnya, string ini:
<data name="Source LCID" xml:space="preserve"> <value>1033</value> </data>
Berubah ke:
<metadata name="Source LCID" xml:space="preserve"> <value>1033</value> </metadata>
Hal ini memungkinkan solution Packager untuk membaca dan mengimpor file sumber daya. Masalah ini hanya diamati saat menggunakan editor sumber daya Visual Studio.