Udostępnij za pośrednictwem


Narzędzie SolutionPackager

SolutionPackager to narzędzie, które można nieodwracalnie rozłożyć Microsoft Dataverse skompresowany plik rozwiązania w wielu plikach XML i innych. Następnie można łatwo zarządzać tymi plikami, używając systemu kontroli źródła. W poniższych sekcjach przedstawiono sposób uruchamiania narzędzia oraz korzystania z niego podczas pracy z rozwiązaniami zarządzanymi i niezarządzanymi.

Ważne

Narzędzie SolutionPackager nie jest już zalecanym sposobem pakietów rozwiązań. Funkcje narzędzia SolutionPackager zostały włączone w interfejs Power Platform CLI. Polecenie pac solution zawiera szereg poleceń unpack, w tym polecenie, pack, clone, sync które zawierają te same podstawowe funkcje narzędzia SolutionPackager.

Gdzie znaleźć narzędzie SolutionPackager

Narzędzie SolutionPackager jest dystrybuowane jako część pakietu Microsoft.CrmSdk.CoreTools menedżera pakietów NuGet. Aby zainstalować program, wykonaj następujące kroki.

  1. Pobierz pakiet NuGet.
  2. Zmień nazwę rozszerzenia nazwy pliky pakietu z .nupkg na .zip.
  3. Wyodrębnij zawartość ze skompresowanego pliku (ZIP).

Znajdź plik wykonania SolutionPackager.exe w <nazwa-wyodrębnionego-folderu>/contents/bin/coretools. Uruchom program z folderu coretools lub dodaj ten folder do ŚCIEŻKI

Argumenty wiersza polecenia narzędzia SolutionPackager

SolutionPackager to narzędzie wiersza polecenia, które można wywołać przy użyciu parametrów wskazanych w poniższej tabeli.

Argument opis
/action: {Extract|Pack} Wymagane. Akcja, która ma zostać wykonana. Akcją może być wyodrębnienie pliku ZIP rozwiązania do folderu lub spakowanie go do pliku ZIP.
/zipfile: <file path> Wymagane. Ścieżka i nazwa pliku ZIP rozwiązania. Podczas wyodrębniania plik musi istnieć i będzie odczytywany. W przypadku pakowania plik zostaje zastąpiony.
/folder: <folder path> Wymagane. Ścieżka do folderu. Podczas wyodrębniania ten folder jest tworzony i wypełniany za pomocą plików składników. W przypadku pakowania folder musi już istnieć i zawierać uprzednio wyodrębnione pliki składników.
/packagetype: {Unmanaged|Managed|Both} Opcjonalny. Typ pakietu do przetworzenia. Wartość domyślna to Niezarządzany. Ten argument może być pominięty w większości przypadków, ponieważ typ pakietu można odczytać z pliku ZIP lub plików składników. W przypadku wyodrębniania i wybrania wartości Oba pliki ZIP rozwiązań zarządzanych i niezarządzanych muszą być obecne i przetwarzane w jednym folderze. W przypadku pakowania i wybrania wartości Oba pliki ZIP rozwiązań zarządzanych i niezarządzanych są tworzone z jednego folderu. Aby uzyskać więcej informacji, zobacz sekcję dotyczącą pracy z rozwiązaniami zarządzanymi i niezarządzanymi w dalszej części tego artykułu.
/allowWrite:{Yes|No} Opcjonalny. Wartością domyślną jest Tak. Ten argument jest używany tylko podczas wyodrębniania. Jeśli zostanie wybrana wartość /allowWrite:Nie, narzędzie wykona wszystkie operacje, ale nie będzie mogło zapisać ani usunąć żadnych plików. Operację wyodrębnienia można skutecznie ocenić, nie zastępując ani usuwając istniejących plików.
/allowDelete:{Yes|No|Prompt} Opcjonalny. Wartość domyślna to Monit. Ten argument jest używany tylko podczas wyodrębniania. Jeśli zostanie wybrana wartość /allowDelete:Tak, wszystkie pliki obecne w folderze określonym przez parametr /folder, które nie są oczekiwane, są usuwane automatycznie. Jeśli zostanie wybrana wartość /allowDelete:Nie, żadne operacje usuwania nie będą wykonywane. Jeśli zostanie wybrana wartość /allowDelete:Prompt, użytkownik jest monitowany przez konsolę o zezwolenie lub odrzucenie wszystkich operacji usuwania. Jeśli zostanie wybrana wartość /allowWrite:Nie, żadne operacje usuwania nie zostaną wykonane, nawet w przypadku wybrania również wartości /allowDelete:Tak.
/clobber Opcjonalny. Ten argument jest używany tylko podczas wyodrębniania. W przypadku określenia wartości /clobber pliki, które mają ustawiony atrybut tylko do odczytu, są zastępowane lub usuwane. W przeciwnym razie pliki z atrybutem tylko do odczytu nie są zastępowane ani usuwane.
/errorlevel: {Off|Error|Warning|Info|Verbose} Opcjonalny. Wartość domyślna to Informacje. Ten argument wskazuje poziom rejestrowania informacji w danych wyjściowych.
/map: <ścieżka pliku> Opcjonalny. Ścieżka i nazwa pliku XML zawierającego dyrektywy dotyczące mapowania pliku. Gdy ten argument jest używany podczas wyodrębniania, pliki zazwyczaj odczytywane z poziomu folderu określonego przez parametr /folder są odczytywane z lokalizacji alternatywnych, zgodnie z opisem w pliku mapowania. W trakcie operacji pakowania pliki pasujące do dyrektyw nie są zapisywane.
/nologo Opcjonalny. Pomiń baner w czasie wykonywania.
/log: <ścieżka pliku> Opcjonalny. Ścieżka i nazwa pliku dziennika. Jeśli plik już istnieje, nowe informacje o rejestrowaniu są dołączane do pliku.
@ <ścieżka pliku> Opcjonalny. Ścieżka i nazwa pliku, który zawiera argumenty wiersza polecenia dla narzędzia.
/sourceLoc: <ciąg> Opcjonalny. Ten argument powoduje wygenerowanie pliku zasobów szablonu i jest ważny tylko w przypadku wyodrębniania.

Dopuszczalne wartości to auto lub kod identyfikatora LCID/ISO dla języka, który ma być eksportowany. W przypadku korzystania z tego argumentu zasoby ciągów z podanych ustawień regionalnych są wyodrębniane jako neutralny plik RESX. W przypadku wybrania wartości auto albo długiej lub krótkiej postaci przełącznika są używane podstawowe ustawienia regionalne lub rozwiązanie. Możesz użyć krótkiej postaci polecenia: /src.
/localize Opcjonalny. Wyodrębnij lub scal wszystkie zasoby ciągów w plikach RESX. Możesz użyć krótkiej postaci polecenia: /loc. Opcja lokalizacji obsługuje udostępnione składniki dla plików resx. Więcej informacji: Używanie zasobów RESX sieci Web

Używanie argumentu polecenia /map

W poniższym omówieniu przedstawiono szczegółowo użycie argumentu /map w narzędziu SolutionPackager.

Pliki utworzone w zautomatyzowanym systemie kompilacji, na przykład plik XAP i zestawy dodatków plug-in rozwiązania Silverlight, nie są zazwyczaj ewidencjonowane w kontroli źródła. Zasoby internetowe mogą już być obecne w kontroli źródła w lokalizacjach, które nie są bezpośrednio zgodne z narzędziem SolutionPackager. Dołączając parametr /map, można przekierować narzędzie SolutionPackager tak, aby odczytywało i pakowało takie pliki z lokalizacji alternatywnych, a nie z wnętrza folderu Extract, jak byłoby to zwykle wykonywane. Parametr /map musi określać nazwę i ścieżkę do pliku XML zawierającego mapowanie. Te dyrektywy instruują program SolutionPackager do dopasowania plików według ich nazwy i ścieżki, oraz wskazują alternatywną lokalizację, w celu znalezienia dopasowanego pliku. Poniższe informacje w takim samym stopniu dotyczą wszystkich dyrektyw.

  • Można wymienić wiele dyrektyw, w tym te, które będą zgodne z identycznymi plikami. Dyrektywy wymienione na początku pliku mają pierwszeństwo przed dyrektywami wymienionymi później.

  • W przypadku dopasowania pliku do dowolnej dyrektywy należy go znaleźć w co najmniej jednej alternatywnej lokalizacji. Jeśli nie zostaną znalezione żadne pasujące alternatywy, narzędzie SolutionPackager wyświetla błąd.

  • Ścieżki folderów i plików mogą być względne lub bezwzględne. Ścieżki względne są zawsze sprawdzane względem folderu określonego przez parametr /folder.

  • Zmienne środowiskowe mogą być określane przy użyciu składni %variable%.

  • Symbol wieloznaczny „**” może służyć do wskazania „w dowolnym podfolderze”. Może być używany tylko jako końcowa część ścieżki, na przykład: „c:\folderA\**”.

  • Symbole wieloznaczne nazw plików mogą być używane tylko w formularzach „*.ext” lub „*.*”. Inny wzorzec nie jest obsługiwany.

    W tym miejscu opisano trzy typy mapowań dyrektyw oraz przedstawiono przykład ich stosowania.

Mapowanie folderu

Poniżej zamieszczono szczegółowe informacje na temat mapowania folderów.

Format XML

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

Opis

Ścieżki plików zgodne z parametrem „folderA” są przełączone na „folderB”.

  • Hierarchia podfolderów w poszczególnych elementach musi być dokładnie dopasowana.

  • Symbole wieloznaczne folderów nie są obsługiwane.

  • Nie można określać nazw plików.

    Przykłady

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

Mapowanie pliku do pliku

Poniżej zamieszczono informacje na temat mapowania pliku do pliku.

Format XML

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

Opis

Każdy plik zgodny z parametrem map zostanie odczytany z poziomu nazwy i ścieżki określonej w parametrze to.

Dla parametru map:

  • Należy określić nazwę pliku. Ścieżka jest opcjonalna. Jeśli nie zostanie określona ścieżka, może nastąpić dopasowanie plików ze wszystkich folderów.

  • Symbole wieloznaczne nazw plików nie są obsługiwane.

  • Symbol wieloznaczny folderu jest obsługiwany.

    Dla parametru to:

  • Należy określić nazwę i ścieżkę pliku.

  • Nazwa pliku może się różnić od nazwy w parametrze map.

  • Symbole wieloznaczne nazw plików nie są obsługiwane.

  • Symbol wieloznaczny folderu jest obsługiwany.

Przykłady

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

W powyższej przykładzie pakietu NuGet plik cr886_PluginPackageTest.nupkg zdumiony nie jest nadpisany, jeśli plik już istnieje w określonej lokalizacji.

Mapowanie ścieżki do pliku

Poniżej zamieszczono szczegółowe informacje na temat mapowania pliku do ścieżki.

Format XML

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

Opis

Każdy plik zgodny z parametrem map jest odczytywany z poziomu ścieżki określonej w parametrze to.

Dla parametru map:

  • Należy określić nazwę pliku. Ścieżka jest opcjonalna. Jeśli nie zostanie określona ścieżka, może nastąpić dopasowanie plików ze wszystkich folderów.

  • Symbole wieloznaczne nazw plików są obsługiwane.

  • Symbol wieloznaczny folderu jest obsługiwany.

Dla parametru to:

  • Należy określić ścieżkę.

  • Symbol wieloznaczny folderu jest obsługiwany.

  • Nie należy określać nazwy pliku.

    Przykłady

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

Przykładowe mapowanie

Poniższy przykładowy kod XML prezentuje kompletny plik mapowania, który umożliwia narzędziu SolutionPackager odczytywanie dowolnego zasobu internetowego i dwóch domyślnych zestawów wygenerowanych z poziomu projektu zestawu narzędzi deweloperskich o nazwie 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>  

Rozwiązania zarządzane i niezarządzane

Skompresowany plik rozwiązania (ZIP) usługi Dataverse może być eksportowany w jednym z dwóch typów, jak przedstawiono poniżej.

Rozwiązanie zarządzane
Ukończone rozwiązanie gotowe do zaimportowania do organizacji. Po zaimportowaniu składniki nie mogą być dodawane ani usuwane, mimo że mogą opcjonalnie zezwalać na dalsze dostosowywanie. Jest to zalecane, gdy programowanie rozwiązania zostanie zakończone.

Rozwiązanie niezarządzane
Otwarte rozwiązanie bez ograniczeń, które można dodać, usunąć lub zmodyfikować. Opcja zalecana podczas projektowania rozwiązania.

Format skompresowanego pliku rozwiązania będzie inny w zależności od typu rozwiązania: zarządzanego lub niezarządzanego. Narzędzie SolutionPackager może przetwarzać skompresowane pliki rozwiązań dowolnego typu. Narzędzie nie może jednak dokonać konwersji jednego typu na inny. Jedynym sposobem na konwersję plików rozwiązania na inny typ, na przykład z niezarządzanych na zarządzane, jest zaimportowanie pliku ZIP rozwiązania niezarządzanego na serwer usługi Dataverse, a następnie wyeksportowanie rozwiązania jako zarządzanego.

Narzędzie SolutionPackager może przetwarzać pliki ZIP rozwiązań niezarządzanych i zarządzanych jak połączony zestaw za pośrednictwem parametru /PackageType:Oba. Aby wykonać tę operację, konieczne jest dwukrotne wyeksportowanie rozwiązania jako każdego typu, nadając plikom ZIP nazwy zgodnie z poniższym opisem.

Niezarządzany plik ZIP: dowolna_nazwa.zip Zarządzany plik ZIP: dowolna_nazwa_managed.zip

Narzędzie przyjmie obecność zarządzanego pliku ZIP w tym samym folderze, w którym znajduje się plik niezarządzany, i wyodrębni oba pliki w jednym folderze z zachowaniem różnic między składnikami zarządzanymi i niezarządzanymi.

Po wyodrębnieniu rozwiązania jako niezarządzanego i zarządzanego będzie możliwe spakowanie obu typów w jednym folderze lub każdego typu osobno, korzystając z parametru /PackageType w celu określenia, który typ ma zostać utworzony. Podczas określania obu plików dwa pliki ZIP zostaną rozpakowane z wykorzystaniem powyższych konwencji nazewnictwa. Jeśli brakuje parametru /PackageType, podczas pakowania z podwójnego folderu rozwiązań zarządzanych i niezarządzanych domyślnie przyjmowany jest jeden plik ZIP rozwiązania niezarządzanego.

Rozwiązywanie problemów

Jeśli używasz programu Visual Studio do edycji plików zasobów tworzonych przez narzędzie do tworzenia pakietów rozwiązań, podczas ponownego pakowania może zostać wyświetlony komunikat o błędzie podobny do następującego: “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.” Dzieje się tak, ponieważ program Visual Studio zastępuje tagi metadanych pliku zasobów tagami danych.

Rozwiązanie

  1. Otwórz plik zasobu w ulubionym edytorze tekstu, a następnie znajdź i zaktualizuj poniższe tagi:

    <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. Zmień nazwę węzła z <data> na <metadata>.

    Na przykład taki ciąg:

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

    Zmienia się na:

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

    Dzięki temu narzędzie do tworzenia pakietów rozwiązań może odczytać i zaimportować plik zasobów. Ten problem występował tylko podczas korzystania z edytora zasobów w programie Visual Studio.

Zobacz także

Używanie kontroli źródła z plikami rozwiązania
Koncepcje związane z rozwiązaniami