Εργαλείο SolutionPackager

Το SolutionPackager είναι ένα εργαλείο που μπορεί να αποσυνθέσει αναστρέψιμα ένα συμπιεσμένο αρχείο λύσης Microsoft Dataverse σε πολλά αρχεία XML και άλλα αρχεία. Στη συνέχεια, μπορείτε εύκολα να διαχειριστείτε αυτά τα αρχεία χρησιμοποιώντας ένα σύστημα ελέγχου προέλευσης. Οι παρακάτω ενότητες σας δείχνουν τον τρόπο εκτέλεσης του εργαλείου και τον τρόπο χρήσης του εργαλείου με διαχειριζόμενες και μη διαχειριζόμενες λύσεις.

Πού θα βρείτε το εργαλείο SolutionPackager

Το εργαλείο SolutionPackager διανέμεται ως μέρος του πακέτου Microsoft.CrmSdk.CoreTools NuGet. Για να εγκαταστήσετε το πρόγραμμα. ακολουθήστε αυτά τα βήματα.

  1. Κάντε λήψη του πακέτου NuGet.
  2. Μετονομάστε την επέκταση ονόματος αρχείου πακέτου από .nupkg σε .zip.
  3. Εξαγάγετε τα περιεχόμενο του συμπιεσμένου αρχείου (zip).

Θα βρείτε το εκτελέσιμο αρχείο SolutionPackager.exe στον φάκελο <extracted-folder-name>/contents/bin/coretools. Εκτελέστε το πρόγραμμα από το φάκελο coretools ή προσθέστε αυτόν το φάκελο στο PATH σας.

Ορίσματα γραμμής εργαλείων 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:No, το εργαλείο εκτελεί όλες τις λειτουργίες, αλλά δεν επιτρέπεται η εγγραφή ή η διαγραφή οποιωνδήποτε αρχείων. Η λειτουργία εξαγωγής μπορεί να εκτιμηθεί με ασφάλεια χωρίς να αντιγραφούν ή να διαγραφούν τα υπάρχοντα αρχεία.
/allowDelete:{Yes|No|Prompt} Προαιρετικό. Η προεπιλεγμένη τιμή είναι Prompt. Αυτό το όρισμα χρησιμοποιείται μόνο κατά τη διάρκεια μιας εξαγωγής. Όταν ορίζεται /allowDelete:Yes, όλα τα αρχεία που υπάρχουν στο φάκελο που καθορίζεται από την παράμετρο /folder τα οποία δεν είναι αναμενόμενα, διαγράφονται αυτόματα. Όταν ορίζεται /allowDelete:No, δεν πραγματοποιούνται διαγραφές. Όταν ορίζεται /allowDelete:Prompt, ζητείται από το χρήστη μέσω της κονσόλας να ορίσει αν επιτρέπονται ή απορρίπτονται όλες οι λειτουργίες διαγραφής. Εάν καθορίζεται /allowWrite:No, δεν γίνονται διαγραφές ακόμα και αν ορίζεται /allowDelete:Yes.
/clobber Προαιρετικό. Αυτό το όρισμα χρησιμοποιείται μόνο κατά τη διάρκεια μιας εξαγωγής. Όταν καθορίζεται το /clobber, τα αρχεία που έχουν ένα σύνολο χαρακτηριστικών μόνο για ανάγνωση αντικαθίστανται ή διαγράφονται. Όταν δεν καθορίζεται, τα αρχεία που έχουν το χαρακτηριστικό μόνο για ανάγνωση δεν αντικαθίστανται ή διαγράφονται.
/errorlevel: {Off|Error|Warning|Info|Verbose} Προαιρετικό. Η προεπιλεγμένη τιμή είναι Info. Αυτό το όρισμα υποδεικνύει το επίπεδο των πληροφοριών καταγραφής προς έξοδο.
/map: <file path> Προαιρετικό. Η διαδρομή και το όνομα ενός αρχείου .xml που περιέχει οδηγίες αντιστοίχισης αρχείων. Όταν χρησιμοποιούνται κατά τη διάρκεια μιας αποσυμπίεσης, τα αρχεία που διαβάζονται συνήθως από το εσωτερικό του φακέλου που καθορίζεται από την παράμετρο /folder, διαβάζονται από εναλλακτικές θέσεις, όπως καθορίζεται στο αρχείο αντιστοίχισης. Κατά τη διάρκεια μιας λειτουργίας συμπίεσης, τα αρχεία που συμφωνούν με τις οδηγίες δεν γράφονται.
/nologo Προαιρετικό. Αποκρύπτεται το διαφημιστικό πλαίσιο κατά το χρόνο εκτέλεσης.
/log: <file path> Προαιρετικό. Μια διαδρομή και ένα όνομα σε ένα αρχείο καταγραφής. Εάν το αρχείο υπάρχει ήδη, οι νέες πληροφορίες καταγραφής προσαρτώνται στο αρχείο.
@ <file path> Προαιρετικό. Μια διαδρομή και ένα όνομα σε ένα αρχείο που περιέχει ορίσματα γραμμής εντολών για το εργαλείο.
/sourceLoc: <string> Προαιρετικό. Αυτό το όρισμα δημιουργεί ένα αρχείο πόρων προτύπου και είναι έγκυρο μόνο κατά την αποσυμπίεση.

Οι πιθανές τιμές είναι auto ή ένας κωδικός LCID/ISO για τη γλώσσα που θέλετε να εξαγάγετε. Όταν χρησιμοποιείται αυτό το όρισμα, οι πόροι συμβολοσειρών από τις δεδομένες τοπικές ρυθμίσεις εξάγονται ως ουδέτερο αρχείο. resx. Εάν ορίζεται auto ή μόνο η μεγάλη ή σύντομη μορφή του διακόπτη, χρησιμοποιούνται οι βασικές τοπικές ρυθμίσεις ή η λύση. Μπορείτε να χρησιμοποιήσετε τη σύντομη μορφή της εντολής: /src.
/localize Προαιρετικό. Εξάγονται ή συγχωνεύονται όλοι οι πόροι συμβολοσειρών σε αρχεία .resx. Μπορείτε να χρησιμοποιήσετε τη σύντομη μορφή της εντολής: /loc. Η επιλογή μετάφρασης υποστηρίζει κοινόχρηστα στοιχεία για αρχεία .resx. Περισσότερες πληροφορίες: ΙΧρησιμοποιώντας πόρους Web RESX

Χρησιμοποιήστε το όρισμα της εντολής /map

Η παρακάτω συζήτηση περιλαμβάνει λεπτομέρειες σχετικά με τη χρήση του ορίσματος /map στο εργαλείο SolutionPackager.

Τα αρχεία που είναι ενσωματωμένα σε ένα αυτοματοποιημένο σύστημα δόμησης, όπως τα αρχεία Silverlight .xap και τα συγκροτήματα προσθηκών, συνήθως δεν ελέγχονται στον έλεγχο προέλευσης. Οι πόροι web μπορεί να είναι ήδη παρόντες στον έλεγχο προέλευσης σε θέσεις που δεν είναι άμεσα συμβατές με το εργαλείο SolutionPackager. Με την συμπερίληψη της παραμέτρου /map, το εργαλείο SolutionPackager μπορεί να κατευθυνθεί στην ανάγνωση και συμπίεση τέτοιων αρχείων από εναλλακτικές θέσεις και όχι μέσα από το φάκελο Εξαγωγή, όπως θα γινόταν κατά κανόνα. Η παράμετρος /map πρέπει να προσδιορίζει το όνομα και τη διαδρομή σε ένα αρχείο XML που περιέχει οδηγίες αντιστοίχισης. Αυτές οι οδηγίες καθοδηγούν το SolutionPackager να ταιριάζουν με τα αρχεία με το όνομα και τη διαδρομή τους και δηλώνουν την εναλλακτική θέση όπου θα βρείτε το αντιστοιχισμένο αρχείο. Οι παρακάτω πληροφορίες ισχύουν εξίσου για όλες τις οδηγίες.

  • Είναι δυνατή η παράθεση πολλών οδηγιών, συμπεριλαμβανομένων εκείνων των οδηγιών που ταιριάζουν με πανομοιότυπα αρχεία. Οι οδηγίες που παρατίθενται νωρίτερα στο αρχείο υπερισχύουν των οδηγιών που παρατίθενται αργότερα.

  • Εάν ένα αρχείο αντιστοιχίζεται με κάποια οδηγία, πρέπει να βρίσκεται σε μία τουλάχιστον εναλλακτική θέση. Εάν δεν βρεθεί καμία εναλλακτική λύση που να ταιριάζει, το SolutionPackager εκδίδει ένα σφάλμα.

  • Οι διαδρομές φακέλων και αρχείων μπορεί να είναι απόλυτες ή σχετικές. Οι σχετικές διαδρομές αξιολογούνται πάντα από το φάκελο που καθορίζεται από την παράμετρο /folder.

  • Οι μεταβλητές περιβάλλοντος μπορεί να προσδιοριστούν με τη χρήση της σύνταξης %variable%.

  • Ένας χαρακτήρας μπαλαντέρ του φακέλου "**" μπορεί να χρησιμοποιηθεί για να υποδηλώσει "σε οποιονδήποτε υποφάκελο". Μπορεί να χρησιμοποιηθεί μόνο ως το τελευταίο μέρος μιας διαδρομής, για παράδειγμα: "c:\folderA\**".

  • Οι χαρακτήρες μπαλαντέρ ονομάτων αρχείων μπορούν να χρησιμοποιηθούν μόνο στις φόρμες "*.ext" ή "*.*". Δεν υποστηρίζεται κανένα άλλο μοτίβο.

    Οι τρεις τύποι αντιστοίχισης οδηγιών περιγράφονται εδώ, μαζί με ένα παράδειγμα που σας δείχνει τον τρόπο χρήσης τους.

Αντιστοίχιση φακέλου

Οι παρακάτω πληροφορίες παρέχουν λεπτομερείς πληροφορίες σχετικά με την αντιστοίχιση φακέλων.

Μορφοποίηση Xml

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

Περιγραφή

Οι διαδρομές αρχείων που ταιριάζουν με το "folderΑ" μετατρέπονται σε "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 την ανάγνωση οποιουδήποτε πόρου web και των δύο προεπιλεγμένων συγκροτημάτων που παράγονται από ένα έργο 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 sub-folders -->  
       <FileToPath map="WebResources\*.*" to="..\..\CrmPackage\WebResources\**" />  
       <FileToPath map="WebResources\**\*.*" to="..\..\CrmPackage\WebResources\**" />  
</Mapping>  

Διαχειριζόμενες και μη διαχειριζόμενες λύσεις

Μπορείτε να εξαγάγετε ένα αρχείο συμπιεσμένης λύσης (. zip) Dataverse σε έναν από δύο τύπους, όπως φαίνεται εδώ.

Διαχειριζόμενη λύση
Μια ολοκληρωμένη λύση έτοιμη για εισαγωγή σε έναν οργανισμό. Εφόσον γίνει εισαγωγή, τα στοιχεία δεν είναι δυνατό να προστεθούν ή να καταργηθούν, παρόλο που μπορούν προαιρετικά να επιτρέψουν περαιτέρω προσαρμογή. Αυτό συνιστάται όταν ολοκληρωθεί η ανάπτυξη της λύσης.

Μη διαχειριζόμενη λύση
Μια ανοιχτή λύση χωρίς περιορισμούς σχετικά με το τι είναι δυνατό να προστεθεί, να καταργηθεί ή να τροποποιηθεί. Αυτό συνιστάται κατά την ανάπτυξη μιας λύσης.

Η μορφή ενός συμπιεσμένου αρχείου λύσης θα είναι διαφορετική ανάλογα με τον τύπο της, διαχειριζόμενη ή μη διαχειριζόμενη. Το SolutionPackager μπορεί να επεξεργαστεί συμπιεσμένα αρχεία λύσης οποιουδήποτε τύπου. Ωστόσο, το εργαλείο δεν μπορεί να μετατρέψει τον έναν τύπο σε άλλο. Ο μόνος τρόπος για να μετατρέψετε αρχεία λύσης σε διαφορετικό τύπο, για παράδειγμα από μη διαχειριζόμενη σε διαχειριζόμενη, είναι με την εισαγωγή του αρχείου. zip της μη διαχειριζόμενης λύσης σε διακομιστή Dataverse και, στη συνέχεια, την εξαγωγή της λύσης ως διαχειριζόμενης λύσης.

Το SolutionPackager μπορεί να επεξεργαστεί αρχεία. zip μη διαχειριζόμενων και διαχειριζόμενων λύσεων ως ένα συνδυασμένο σύνολο μέσω της παραμέτρου /PackageType:Both. Για να εκτελέσετε αυτήν τη λειτουργία, πρέπει να εξαγάγετε τη λύση σας δύο φορές ως κάθε τύπο και να ονομάζετε τα αρχεία. zip ως εξής.

Μη διαχειριζόμενο αρχείο .zip: AnyName zip Διαχειριζόμενο αρχείο .zip: AnyName_managed.zip

Το εργαλείο θα θεωρήσει την παρουσία του διαχειριζόμενου αρχείου zip στον ίδιο φάκελο με το μη διαχειριζόμενο αρχείο και θα εξαγάγει και τα δύο αρχεία σε έναν μόνο φάκελο διατηρώντας τις διαφορές όπου υπάρχουν διαχειριζόμενα και μη διαχειριζόμενα στοιχεία.

Αφού γίνει εξαγωγή μιας λύσης τόσο ως μη διαχειριζόμενης όσο και διαχειριζόμενης, είναι δυνατή η χρήση του ίδιου φακέλου για τη συμπίεση και των δύο ή κάθε τύπου μεμονωμένα, με χρήση της παραμέτρου /PackageType για τον καθορισμό του τύπου που θα δημιουργηθεί. Όταν καθορίζετε και τα δύο αρχεία, τα δύο αρχεία. zip θα παράγονται με τη χρήση της παρακάτω σύμβασης ονομασίας. Εάν η παράμετρος /PackageType λείπει κατά τη συμπίεση από έναν διπλό διαχειριζόμενο και μη διαχειριζόμενο φάκελο, η προεπιλογή είναι να παραχθεί ένα μόνο μη διαχειριζόμενο αρχείο. zip.

Αντιμετώπιση προβλημάτων

Εάν χρησιμοποιείτε το Visual Studio για να επεξεργαστείτε αρχεία πόρων που δημιουργήθηκαν από το solution packager, ενδέχεται κατά την επανασυμπίεση να λάβετε ένα μήνυμα παρόμοιο με αυτό: “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.

Δείτε επίσης

Χρήση Ελέγχου προέλευσης με Αρχεία λύσης

Έννοιες λύσης