แชร์ผ่าน


เครื่องมือ SolutionPackager

SolutionPackager เป็นเครื่องมือที่สามารถย่อยไฟล์โซลูชันที่บีบอัดของ Microsoft Dataverse ไปเป็นไฟล์ XML หลายๆ ไฟล์ และไฟล์อื่นๆ จากนั้นคุณสามารถจัดการไฟล์เหล่านี้ได้อย่างง่ายดายโดยใช้ระบบควบคุมแหล่งที่มา ส่วนต่อไปนี้แสดงวิธีเรียกใช้เครื่องมือและวิธีใช้เครื่องมือด้วยโซลูชันที่มีการจัดการและไม่มีการจัดการ

สำคัญ

เครื่องมือ SolutionPackager ไม่ใช่วิธีที่แนะนำในการแยกและบรรจุโซลูชันอีกต่อไป ความสามารถของเครื่องมือ SolutionPackager ได้รวมอยู่ใน Power Platform CLI คำสั่ง pac solution มีคำกริยาจำนวนหนึ่ง ได้แก่ unpack, pack, clone และ sync ที่รวมเอาความสามารถพื้นฐานเดียวกันของเครื่องมือ SolutionPackager

จะหาเครื่องมือ SolutionPackager ได้ที่ไหน

เครื่องมือ SolutionPackager จะถูกแจกจ่ายเป็นส่วนหนึ่งของแพ็คเกจ Microsoft.CrmSdk.CoreTools NuGet ในการติดตั้งโปรแกรม ให้ทำตามขั้นตอนเหล่านี้

  1. ดาวน์โหลดแพคเกจ NuGet
  2. เปลี่ยนชื่อนามสกุลไฟล์แพคเกจจาก .nupkg เป็น .zip
  3. แตกเนื้อหาของไฟล์ zip ที่บีบอัด

ค้นหาไฟล์ปฏิบัติการ SolutionPackager.exe ในโฟลเดอร์ <extracted-folder-name>/contents/bin/coretools เรียกใช้โปรแกรมจากโฟลเดอร์ coretools หรือเพิ่มโฟลเดอร์นั้นในพาธของคุณ

อาร์กิวเมนต์บรรทัดคำสั่งของ SolutionPackager

SolutionPackager เป็นเครื่องมือบรรทัดคำสั่งที่สามารถเรียกใช้ด้วยพารามิเตอร์ที่ระบุในตารางต่อไปนี้

อาร์กิวเมนต์ Description
/action: {Extract|Pack} จำเป็น การกระทำที่จะดำเนินการ การดำเนินการสามารถเป็นได้ทั้งเพื่อแยกไฟล์ .zip โซลูชันไปยังโฟลเดอร์หรือเพื่อแพคโฟลเดอร์ลงในไฟล์ .zip
/zipfile: <file path> จำเป็น พาธและชื่อของไฟล์ .zip โซลูชัน เมื่อแตก ไฟล์จะต้องมีอยู่และสามารถอ่านได้ เมื่อทำการบรรจุ ไฟล์จะถูกแทนที่
/folder: <folder path> จำเป็น พาธไปยังโฟลเดอร์ เมื่อแตกไฟล์ โฟลเดอร์นี้จะถูกสร้างและบรรจุด้วยไฟล์ส่วนประกอบ เมื่อทำการบรรจุ โฟลเดอร์นี้จะต้องมีอยู่แล้ว และมีไฟล์ส่วนประกอบที่แตกก่อนหน้านี้
/packagetype: {Unmanaged|Managed|Both} ไม่บังคับ ชนิดของแพคเกจที่จะดำเนินการ ค่าเริ่มต้นคือ ไม่มีการจัดการ อาร์กิวเมนต์นี้อาจถูกละเว้นในโอกาสส่วนใหญ่ เนื่องจากชนิดของแพคเกจสามารถอ่านได้จากภายในไฟล์ .zip หรือไฟล์ส่วนประกอบ เมื่อมีการแยกและระบุทั้งสองไฟล์ ไฟล์ .zip ที่มีการจัดการและไม่มีการจัดการจะต้องมีอยู่และถูกประมวลผลในโฟลเดอร์เดียว เมื่อมีการบรรจุและระบุทั้งสองไฟล์ ไฟล์ .zip ที่ได้รับการจัดการและไม่ได้รับการจัดการถูกสร้างขึ้นจากโฟลเดอร์เดียว สำหรับข้อมูลเพิ่มเติม โปรดดูหัวข้อการทำงานกับโซลูชันที่ได้รับการจัดการและไม่ได้รับการจัดการในภายหลังในบทความนี้
/allowWrite:{Yes|No} ไม่บังคับ ค่าเริ่มต้นคือ ใช่ อาร์กิวเมนต์นี้ใช้ระหว่างการแยกเท่านั้น เมื่อ /allowWrite:ไม่ได้ระบุ เครื่องมือจะดำเนินการทั้งหมด แต่ป้องกันไม่ให้เขียนหรือลบไฟล์ใด ๆ การดำเนินการแยกสามารถประเมินได้อย่างปลอดภัย โดยไม่ต้องเขียนทับหรือลบไฟล์ใดๆ ที่มีอยู่
/allowDelete:{Yes|No|Prompt} ไม่บังคับ ค่าเริ่มต้นคือ พร้อมท์ อาร์กิวเมนต์นี้ใช้ระหว่างการแยกเท่านั้น เมื่อ /allowDelete:Yes ถูกระบุ ไฟล์ใดๆ ที่มีอยู่ในโฟลเดอร์ที่ระบุโดยพารามิเตอร์โฟลเดอร์ที่ไม่ได้คาดหวังจะถูกลบโดยอัตโนมัติ เมื่อมีการระบุ /allowDelete:No จะไม่มีการลบเกิดขึ้น เมื่อ /allowDelete:ถูกระบุ ผู้ใช้จะได้รับแจ้งผ่านคอนโซลเพื่ออนุญาตหรือปฏิเสธการลบทั้งหมด หากมีการระบุ /allowWrite:No จะไม่มีการลบเกิดขึ้นแม้จะมีการระบุ /allowDelete:Yes ด้วยก็ตาม
/clobber เลือกได้ อาร์กิวเมนต์นี้ใช้ระหว่างการแยกเท่านั้น เมื่อระบุ /clobber ไฟล์ที่มีชุดคุณลักษณะอ่านอย่างเดียวจะถูกเขียนทับหรือลบทิ้ง เมื่อไม่ระ ไฟล์ที่มีชุดคุณลักษณะอ่านอย่างเดียวจะไม่ถูกเขียนทับหรือลบทิ้ง
/errorlevel: {Off|Error|Warning|Info|Verbose} ไม่บังคับ ค่าเริ่มต้นคือ ข้อมูล อาร์กิวเมนต์นี้ระบุระดับของการบันทึกข้อมูลไปยังเอาต์พุต
/map: <file path> ไม่บังคับ พาธและชื่อของไฟล์ .xml ที่มีคำสั่งการแมปไฟล์ เมื่อใช้ระหว่างการแตกไฟล์ โดยทั่วไปไฟล์ที่อ่านจากภายในโฟลเดอร์ที่ระบุโดยพารามิเตอร์ /folder จะถูกอ่านจากตำแหน่งอื่นตามที่ระบุในไฟล์การจับคู่ ในระหว่างการดำเนินการแพค ไฟล์ที่ตรงกับคำสั่งจะไม่ถูกเขียน
/nologo ไม่บังคับ หยุดแบนเนอร์ในขณะใช้งานจริง
/บันทึก: <พาธไฟล์> ไม่บังคับ พาธและชื่อไปยังไฟล์บันทึก หากไฟล์มีอยู่แล้ว ข้อมูลการบันทึกใหม่จะถูกผนวกเข้ากับไฟล์
@ <พาธของไฟล์> ไม่บังคับ พาธและชื่อไปยังไฟล์ที่มีอาร์กิวเมนต์บรรทัดคำสั่งสำหรับเครื่องมือ
/sourceLoc: <สตริง> ไม่บังคับ อาร์กิวเมนต์นี้สร้างไฟล์ทรัพยากรแมม่แบบและใช้ได้กับการแยกเท่านั้น

ค่าที่เป็นไปได้คือ auto หรือรหัส LCID / ISO สำหรับภาษาที่คุณต้องการส่งออก เมื่อใช้อาร์กิวเมนต์นี้ทรัพยากรสตริงจากสถานที่ที่กำหนดจะถูกแยกเป็นไฟล์ .resx ที่เป็นกลาง ถ้า auto หรือระบุสวิตช์แบบยาวหรือสั้นสวิตช์ ตำแหน่งที่ตั้งฐานหรือโซลูชันจะถูกใช้ คุณสามารถใช้รูปแบบย่อของคำสั่ง: /src
/localize เลือกได้ แยกหรือรวมทรัพยากรสตริงทั้งหมดลงในไฟล์ .resx คุณสามารถใช้รูปแบบย่อของคำสั่ง: /loc ตัวเลือกแปลเป็นภาษาท้องถิ่น สนับสนุนส่วนประกอบที่ใช้ร่วมกันสำหรับไฟล์ .resx ข้อมูลเพิ่มเติม: การใช้ทรัพยากรบนเว็บ RESX

ใช้อาร์กิวเมนต์คำสั่ง /map

การสนทนาต่อไปนี้มีรายละเอียดการใช้อาร์กิวเมนต์ /map ไปยังเครื่องมือ SolutionPackager

ไฟล์ที่สร้างขึ้นในระบบบิลด์อัตโนมัติ เช่น ไฟล์ .xap Silverlight และแอสเซมบลีปลั๊กอิน มักไม่ถูกตรวจสอบในการควบคุมต้นทาง ทรัพยากรบนเว็บอาจมีอยู่ในแหล่งควบคุมต้นทางในสถานที่ที่ไม่เข้ากันโดยตรงกับเครื่องมือ SolutionPackager โดยการรวมพารามิเตอร์ /map เครื่องมือ SolutionPackager สามารถนำไปอ่านและทำแพคเกจไฟล์ดังกล่าวจากตำแหน่งอื่น และไม่ได้อยู่ในโฟลเดอร์ Extract ดังที่ปกติแล้วจะทำ พารามิเตอร์ /map ต้องระบุชื่อและพาธไปยังไฟล์ XML ที่มีคำสั่งการแมป คำสั่งเหล่านั้นจะสั่งให้ SolutionPackager จับคู่ไฟล์ตามชื่อและพาธ และระบุตำแหน่งอื่นเพื่อค้นหาไฟล์ที่ตรงกัน ข้อมูลต่อไปนี้ใช้กับคำสั่งทั้งหมดอย่างเท่าเทียมกัน

  • คำสั่งหลายรายการอาจมีการระบุไว้รวมถึงคำสั่งที่จะจับคู่ไฟล์ที่เหมือนกัน คำสั่งที่ระบุไว้ในไฟล์จะมีความสำคัญมากกว่าคำสั่งที่ระบุไว้ในภายหลัง

  • หากไฟล์ถูกจับคู่กับคำสั่งใด ๆ จะต้องพบไฟล์นั้นในตำแหน่งอื่นอย่างน้อยหนึ่งตำแหน่ง หากไม่พบทางเลือกที่ตรงกัน SolutionPackager จะส่งข้อผิดพลาด

  • พาธโฟลเดอร์และไฟล์อาจเป็นแบบสัมบูรณ์หรือแบบสัมพัทธ์ พาธสัมพัทธ์จะถูกประเมินจากโฟลเดอร์ที่ระบุโดยพารามิเตอร์ /folder เสมอ

  • ตัวแปรของสภาพแวดล้อมอาจถูกระบุโดยใช้ syntax %variable%

  • อาจใช้อักขระตัวแทนโฟลเดอร์ “**” เพื่อหมายถึง "ในโฟลเดอร์ย่อยใดๆ " ซึ่งสามารถใช้เป็นส่วนสุดท้ายของเส้นทาง ตัวอย่างเช่น: “c:\folderA\**”

  • อักขระตัวแทนชื่อไฟล์สามารถใช้ได้เฉพาะในรูปแบบ "*.ext" หรือ “*.*” ไม่รองรับรูปแบบอื่น

    การแมปคำสั่งทั้งสามประเภทมีการอธิบายไว้ที่นี่พร้อมด้วยตัวอย่างที่แสดงวิธีใช้

การแมปโฟลเดอร์

ข้อมูลต่อไปนี้ให้ข้อมูลรายละเอียดเกี่ยวกับการแมปโฟลเดอร์

รูปแบบ XML

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

คำอธิบาย

พาธของไฟล์ที่ตรงกับ "folderA" จะเปลี่ยนเป็น "folderB"

  • ลำดับชั้นของโฟลเดอร์ย่อยแต่ละอันจะต้องตรงกันทุกประการ

  • ไม่รองรับสัญลักษณ์แทนโฟลเดอร์

  • อาจไม่มีการระบุชื่อไฟล์

    ตัวอย่าง

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

การแมปไฟล์ไปที่ไฟล์

ข้อมูลต่อไปนี้ให้รายละเอียดเพิ่มเติมเกี่ยวกับการแมปไฟล์กับไฟล์

รูปแบบ XML

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

คำอธิบาย

ไฟล์ใดก็ได้ที่ตรงกับพารามิเตอร์ map จะถูกอ่านจากชื่อและพาธที่ระบุในพารามิเตอร์ to

สำหรับพารามิเตอร์ map:

  • ต้องระบุชื่อไฟล์ พาธเป็นทางเลือก หากไม่ระบุพาธ ไฟล์จากโฟลเดอร์ใดๆ อาจถูกจับคู่

  • ไม่รองรับสัญลักษณ์แทนชื่อไฟล์

  • สนับสนุนสัญลักษณ์ตัวแทนโฟลเดอร์

    สำหรับพารามิเตอร์ to:

  • ต้องระบุชื่อไฟล์และพาธ

  • ชื่อไฟล์อาจแตกต่างจากชื่อในพารามิเตอร์ map

  • ไม่รองรับสัญลักษณ์แทนชื่อไฟล์

  • สนับสนุนสัญลักษณ์ตัวแทนโฟลเดอร์

ตัวอย่าง

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

ในตัวอย่างแพ็กเกจ NuGet ข้างต้น cr886_PluginPackageTest.nupkg จะไม่ถูกเขียนทับหากไฟล์มีอยู่แล้วในตำแหน่งที่ระบุ

หารแมปไฟล์ไปที่พาธ

ต่อไปนี้ให้ข้อมูลรายละเอียดเกี่ยวกับการแมปไฟล์ไปที่พาธ

รูปแบบ XML

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

คำอธิบาย

ไฟล์ใดก็ได้ที่ตรงกับพารามิเตอร์ map ถูกอ่านจากพาธที่ระบุในพารามิเตอร์ to

สำหรับพารามิเตอร์ map:

  • ต้องระบุชื่อไฟล์ พาธเป็นทางเลือก หากไม่ระบุพาธ ไฟล์จากโฟลเดอร์ใดๆ อาจถูกจับคู่

  • รองรับสัญลักษณ์แทนชื่อไฟล์

  • สนับสนุนสัญลักษณ์ตัวแทนโฟลเดอร์

สำหรับพารามิเตอร์ to:

  • ต้องระบุพาธ

  • สนับสนุนสัญลักษณ์ตัวแทนโฟลเดอร์

  • ไม่ต้องระบุชื่อไฟล์

    ตัวอย่าง

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

ตัวอย่างการแมป

ตัวอย่างโค้ด XML ต่อไปนี้แสดงไฟล์การจับคู่ที่สมบูรณ์ ซึ่งเปิดใช้งานเครื่องมือ SolutionPackager เพื่ออ่านทรัพยากรเว็บใดๆ และแอสเซมบลีที่สร้างเริ่มต้นสองรายการ จากโครงการ Developer Toolkit ที่ชื่อ 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>  

โซลูชันที่มีการจัดการและที่ไม่มีการจัดการ

ไฟล์โซลูชัน Dataverse ที่บีบอัด (.zip) สามารถส่งออกในหนึ่งในสองประเภทดังที่แสดงไว้ที่นี่

โซลูชันที่มีการจัดการ
โซลูชันที่เสร็จสมบูรณ์พร้อมที่จะนำเข้าสู่องค์กร เมื่อนำเข้าแล้ว จะไม่สามารถเพิ่มหรือลบส่วนประกอบได้ แม้ว่าจะสามารถอนุญาตให้ปรับแต่งเพิ่มเติมได้ก็ตาม แนะนำให้ใช้เมื่อการพัฒนาโซลูชันเสร็จสมบูรณ์

โซลูชันที่ไม่ได้รับการจัดการ
โซลูชันแบบเปิดที่ไม่มีข้อจำกัดเกี่ยวกับสิ่งที่สามารถเพิ่ม เอาออก หรือแก้ไขได้ แนะนำในระหว่างการพัฒนาโซลูชัน

รูปแบบของไฟล์โซลูชันที่ถูกบีบอัดจะแตกต่างกันไปตามประเภทของไฟล์ ไม่ว่าจะถูกจัดการหรือไม่มีการจัดการ SolutionPackager สามารถประมวลผลไฟล์โซลูชันที่บีบอัดได้ทั้งสองประเภท อย่างไรก็ตาม เครื่องมือไม่สามารถแปลงประเภทหนึ่งเป็นประเภทอื่นได้ วิธีเดียวที่จะแปลงไฟล์โซลูชันเป็นประเภทอื่น เช่น จากที่ไม่มีการจัดการเป็นการจัดการ คือการนำเข้าไฟล์ .zip ที่ไม่มีการจัดการโซลูชันไปยังเซิร์ฟเวอร์ Dataverse จากนั้นส่งออกโซลูชันเป็น โซลูชันที่มีการจัดการ

SolutionPackager สามารถประมวลผลไฟล์ที่ไม่มีการจัดการและโซลูชันที่มีการจัดการ .zip เป็นชุดรวมผ่าน /PackageType: ทั้งสองพารามิเตอร์ ในการดำเนินการนี้ มีความจำเป็นต้องส่งออกโซลูชันของคุณสองครั้ง ตามประเภทการตั้งชื่อไฟล์ .zip ดังนี้

ไฟล์ .zip ที่ไม่มีการจัดการ: AnyName.zip ไฟล์ .zip ที่มีการจัดการ: AnyName_managed.zip

เครื่องมือจะสมมติว่ามีไฟล์ zip ที่มีการจัดการในโฟลเดอร์เดียวกันกับไฟล์ที่ไม่มีการจัดการ และแยกไฟล์ทั้งสองเป็นโฟลเดอร์เดียว เพื่อรักษาความแตกต่างที่มีส่วนประกอบที่ได้รับการจัดการและไม่มีการจัดการอยู่

หลังจากแยกโซลูชันเป็นแบบไม่มีการจัดการและจัดการแล้ว เป็นไปได้จากโฟลเดอร์เดียวที่จะแพคทั้งสองหรือแต่ละชนิดแยกกันโดยใช้พารามิเตอร์ /PackageType เพื่อระบุประเภทที่จะสร้าง เมื่อระบุทั้งสองไฟล์ จะมีการสร้างไฟล์ .zip ทั้งสองไฟล์โดยใช้หลักการตั้งชื่อดังกล่าว หากพารามิเตอร์ /PackageType หายไปเมื่อทำการแพคจากโฟลเดอร์ที่มีการจัดการและไม่ได้รับการจัดการแบบคู่ ค่าเริ่มต้นคือการสร้างไฟล์ .zip แบบไม่มีการจัดการ ไฟล์เดียว

การแก้ไขปัญหา

ถ้าคุณใช้ Visual Studio เพื่อแก้ไขไฟล์ทรัพยากรที่สร้างโดยตัวแก้ปัญหาแพคเกจคุณอาจได้รับข้อความเมื่อคุณแพคที่คล้ายกันนี้: “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.” สิ่งนี้เกิดขึ้นเพราะ Visual Studio แทนที่แท็กข้อมูลเมตาของไฟล์ทรัพยากรด้วยแท็กข้อมูล

การแก้ไข

  1. เปิดไฟล์ทรัพยากรในตัวแก้ไขข้อความที่คุณโปรดปราน และค้นหาและอัพเดตแท็กต่อไปนี้:

    <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. เปลี่ยนชื่อโหนดจาก <data> เป็น <metadata>

    ตัวอย่าง สตริงนี้:

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

    เปลี่ยนเป็น:

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

    สิ่งนี้อนุญาตให้ Solution Packager อ่านและนำเข้าไฟล์ทรัพยากร ปัญหานี้เกิดขึ้นเมื่อใช้งานตัวแก้ไขทรัพยากร Visual Studio

ดูเพิ่มเติม

ใช้การควบคุมแหล่งที่มาด้วยไฟล์โซลูชัน
แนวคิดการแก้ปัญหา