Bagikan melalui


Alat SolutionPackager

SolutionPackager adalah alat yang dapat menguraikan file solusi terkompresi secara Microsoft Dataverse reversibel 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.

Lokasi menemukan alat SolutionPackager

Alat SolutionPackager didistribusikan sebagai bagian dari paket NuGet Microsoft.CrmSdk.CoreTools. Untuk menginstal program, ikuti langkah-langkah berikut.

  1. Unduh paketnya NuGet .
  2. Ubah nama ekstensi nama file paket dari .nupkg menjadi .zip.
  3. Ekstrak konten file terkompresi (zip).

Anda akan menemukan SolutionPackager.exe 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 pengepakan dan Keduanya ditentukan, solusi terkelola dan tidak terkelola .zip file dihasilkan dari satu folder. Untuk informasi lebih lanjut, lihat bagian tentang cara menangani solusi terkelola dan tidak terkelola nanti di topik 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. Bila/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 secara langsung kompatibel 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 arahan 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 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%.

  • Folder wildcard "" dapat digunakan untuk berarti "di sub-folder mana 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 rinci tentang pemetaan folder.

Format XML

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

KETERANGAN

Jalur file yang cocok dengan "folderA" dialihkan ke "folderB".

  • Hierarki subfolder di bawah masing-masing harus sama persis.

  • Folder wildcard 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 rincian lebih lanjut tentang pemetaan file-ke-file.

Format XML

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

KETERANGAN

File yang cocok dengan parameter map akan dibaca dari nama dan 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 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" /> 

Perhatikan bahwa dalam contoh paket di atas, cr886_PluginPackageTest.nupkg tidak ditimpa jika file sudah ada di NuGet lokasi yang ditentukan.

Pemetaan file ke jalur

Berikut menyediakan informasi rinci tentang pemetaan file ke jalur.

Format XML

<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 sub-folders -->  
       <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 tidak terkelola
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 diproduksi 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

  1. 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">  
    
    
  2. 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.

Lihat juga

Gunakan kontrol sumber dengan file solusi

Konsep solusi