SolutionPackager aracı

SolutionPackager, Microsoft Dataverse sıkıştırılmış bir çözüm dosyasını birden çok XML dosyasına ve diğer dosyalara geri döndürülebilir hale bağlayan bir araçtır. Daha sonra, bu dosyaları bir kaynak denetim sistemi kullanarak kolayca yönetebilirsiniz. Aşağıdaki bölümlerde aracın nasıl çalıştırılacağı ve aracın yönetilen ve yönetilmeyen çözümlerle nasıl kullanılacağı gösterilir.

SolutionPackager aracını bulma

SolutionPackager aracı, Microsoft.CrmSdk.CoreTools NuGet paketinin bir parçası olarak dağıtılır. Programı kurmak için aşağıdaki adımları izleyin.

  1. NuGet paketini indirin.
  2. Paket dosya adı uzantısını .nupkg'den .zip'e değiştirin.
  3. Sıkıştırılmış (zip) dosyasının içeriklerini ayıklayın.

SolutionPackager.exe yürütülebilir dosyası <extracted-folder-name>/contents/bin/coretools klasöründe yer alır. Programı coretools klasöründe çalıştırın veya bu klasörü YOLUNUZA ekleyin.

SolutionPackager komut satırı bağımsız değişkenleri

SolutionPackager, aşağıdaki tabloda belirtilen parametrelerle çağrılabilen bir komut satırı aracıdır.

Bağımsız değişken Tanım
/action: {Extract|Pack} Gerekli. Gerçekleştirilecek eylem. Eylem, bir çözüm .zip dosyasını bir klasöre ayıklamak veya bir klasörü bir .zip dosyasına paketlemek olabilir.
/zipfile: <file path> Gerekli. Çözüm .zip dosyasının yolu ve adı. Ayıklama sırasında dosya mevcut ve okunur olmalıdır. Paketleme sırasında dosya değiştirilir.
/folder: <folder path> Gerekli. Klasörün yolu. Ayıklama sırasında bu klasör oluşturulur ve bileşen dosyalarıyla doldurulur. Paketleme sırasında, bu klasör zaten var olmalı ve önceden çıkarılmış bileşen dosyalarını içermelidir.
/packagetype: {Unmanaged|Managed|Both} isteğe bağlı. İşlenecek paket türü. Varsayılan değer Yönetilmeyen'dir. Paket türü .zip dosyasının veya bileşen dosyalarının içinden okunabildiği için bu bağımsız değişken çoğu durumda atlanabilir. Ayıklama sırasında İkisi değeri belirtildiğinde yönetilen ve yönetilmeyen çözüm .zip dosyaları var olmalı ve tek bir klasörde işlenmelidir. Paketleme sırasında ve İkisi değeri belirtildiğinde yönetilen ve yönetilmeyen çözüm .zip dosyaları tek bir klasörden üretilir. Daha fazla bilgi için bu konuda daha sonra açıklanan yönetilen ve yönetilmeyen çözümlerle çalışma bölümüne bakın.
/allowWrite:{Yes|No} isteğe bağlı. Varsayılan değer Evet'tir. Bu bağımsız değişken yalnızca ayıklama sırasında kullanılır. /allowWrite:Hayır şeklinde belirtildiğinde araç tüm işlemleri gerçekleştirir ancak herhangi bir dosyayı yazması veya silmesi engellenir. Ayıklama işlemi, var olan dosyaların üzerine yazılmadan veya var olan dosyalar silinmeden güvenli bir şekilde uygulanır.
/allowDelete:{Yes|No|Prompt} isteğe bağlı. Varsayılan değer İstem'dir. Bu bağımsız değişken yalnızca ayıklama sırasında kullanılır. /allowDelete:Evet şeklinde belirtildiğinde /folder parametresi tarafından belirtilen klasöründeki beklenmeyen tüm dosyalar otomatik olarak silinir. /allowDelete:Hayır şeklinde belirtildiğinde herhangi bir silme eylemi gerçekleşmez. /allowDelete:İstem şeklinde belirtildiğinde kullanıcıdan konsol aracılığıyla yapılabilecek tüm silme işlemlerine onay vermesi veya bunları reddetmesi istenir. /allowWrite:Hayır şeklinde belirtildiğinde /allowDelete:Evet şeklinde belirtilmiş de olsa silme eylemi gerçekleşmez.
/clobber isteğe bağlı. Bu bağımsız değişken yalnızca ayıklama sırasında kullanılır. /clobber belirtildiğinde salt okunur özniteliği ayarlanmış dosyaların üzerine yazılır veya bunlar silinir. Belirtilmediğinde salt okunur özniteliğine sahip dosyaların üzerine yazılmaz veya bunlar silinmez.
/errorlevel: {Off|Error|Warning|Info|Verbose} isteğe bağlı. Varsayılan değer Bilgi'dir. Bu bağımsız değişken, gönderilecek günlük bilgilerinin düzeyini gösterir.
/map: <file path> isteğe bağlı. Dosya eşleme yönergeleri içeren bir .xml dosyasının yolu ve adı. Ayıklama sırasında kullanıldığında dosyalar, tipik olarak /folder parametresi tarafından belirtilen klasörün içinden değil eşleme dosyasında belirtilen alternatif konumlardan okunur. Paketleme işlemi sırasında yönergelerle eşleşen dosyalar yazılmaz.
/nologo isteğe bağlı. Çalışma zamanında başlığı gizleyin.
/log: <file path> isteğe bağlı. Günlük dosyasının yolu ve adı. Dosya zaten varsa dosyaya yeni günlük bilgileri eklenir.
@ <file path> isteğe bağlı. Araç için komut satırı bağımsız değişkenleri içeren bir dosyanın yolu ve adı.
/sourceLoc: <string> isteğe bağlı. Bu bağımsız değişken, bir şablon kaynak dosyası oluşturur ve yalnızca ayıklama sırasında geçerlidir.

Olası değerler, dışarı aktarmak istediğiniz dil için auto veya LCID/ISO kodudur. Bu bağımsız değişken kullanıldığında belirtilen yerel ayardaki dize kaynakları nötr bir .resx dosyası olarak çıkarılır. auto veya yalnızca uzun ya da kısa geçiş formu belirtilirse taban yerel ayarı veya çözümü kullanılır. Komutun kısa formunu kullanabilirsiniz: /src.
/localize isteğe bağlı. Tüm dize kaynaklarını .resx dosyalarına ayıklayın veya .resx dosyaları şeklinde birleştirin. Komutun kısa formunu kullanabilirsiniz: /loc. Yerelleştir seçeneği, .resx dosyaları için paylaşılan bileşenleri destekler. Daha fazla bilgi: RESX web kaynaklarını kullanma

/map komutu bağımsız değişkenini kullanma

Aşağıdaki açıklamada, /map bağımsız değişkeninin SolutionPackager aracında kullanımı ayrıntılı olarak açıklamaktadır.

.xap Silverlight dosyaları ve eklenti derlemeleri gibi otomatik derleme sisteminde oluşturulan dosyalar genellikle kaynak denetimine alınmaz. Web kaynakları, SolutionPackager aracıyla doğrudan uyumlu olmayan konumlardaki kaynak denetiminde zaten var olabilir. Buna benzer dosyaları normalde olduğu gibi Ayıklama klasörünün içinden değil de farklı konumlardan okuması ve paketlemesi için SolutionPackager aracı, /map parametresi eklenerek yönlendirilebilir. /map parametresi, eşleme yönergeleri içeren bir XML dosyasının adını ve yolunu belirtmelidir. Bu yönergeler, dosyaları adlarıyla yoluna göre eşleştirmek için SolutionPackager'a yönlendirir ve eşleştirilen dosyayı bulmak için alternatif konumu gösterir. Aşağıdaki bilgiler, tüm yönergeler için aynı şekilde uygulanır.

  • Aynı dosyalarla eşleşecek olan yönergeler de dahil olmak üzere birden çok yönerge listelenebilir. Dosyanın başında listelenen yönergeler, daha sonra listelenen yönergelere göre önceliklidir.

  • Dosya herhangi bir yönerge ile eşleşiyorsa en az bir alternatif konumda bulunmalıdır. Eşleşen alternatif bulunmazsa SolutionPackager bir hata verir.

  • Klasör ve dosya yolları mutlak veya göreli olabilir. Göreli yollar, her zaman /folder parametresi tarafından belirtilen klasörden değerlendirilir.

  • Ortam değişkenleri, %variable% söz dizimi kullanılarak belirtilebilir.

  • Klasör joker karakteri “**”, "herhangi bir alt klasörde" anlamında kullanılabilir. Yalnızca bir yolun son parçası olarak kullanılabilir, örneğin: "c:\klasörA\**”.

  • Dosya adı joker karakterleri yalnızca "*. ext" veya "*.*" formlarında kullanılabilir. Başka bir düzen desteklenmez.

    Burada üç tür yönerge eşlemesi, nasıl kullanıldıklarının gösterildiği bir örnekle açıklanmaktadır.

Klasör eşleme

Aşağıdaki bilgiler, klasör eşleme hakkında ayrıntılı bilgi sağlar.

Xml Biçimi

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

Veri Akışı Açıklaması

"klasörA" ile eşleşen dosya yolları "klasörB" olarak değiştirilecektir.

  • Her birinin altındaki alt klasörlerin hiyerarşisi tam olarak eşleşmelidir.

  • Klasör joker karakterleri desteklenmez.

  • Hiçbir dosya adı belirtilemez.

    Örnekler

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

Dosyadan dosyaya eşleme

Aşağıdaki bilgiler, dosyadan dosyaya eşleme hakkında ayrıntılı bilgi sağlar.

Xml Biçimi

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

Veri Akışı Açıklaması

map parametresiyle eşleşen tüm dosyalar to parametresinde belirtilen addan ve yoldan okunur.

map parametresi için:

  • Dosya adı belirtilmelidir. Yol, isteğe bağlıdır. Herhangi bir yol belirtilmezse herhangi bir klasördeki dosyalar eşleştirilebilir.

  • Dosya adı joker karakterleri desteklenmez.

  • Klasör joker karakteri desteklenir.

    to parametresi için:

  • Dosya adı ve yolu belirtilmelidir.

  • Dosya adı, map parametresindeki addan farklı olabilir.

  • Dosya adı joker karakterleri desteklenmez.

  • Klasör joker karakteri desteklenir.

Örnekler

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

Yukarıdaki NuGet paket örneğinde, dosya belirtilen konumda zaten varsa cr886_PluginPackageTest.nupkg'nin üzerine yazılmaz.

Dosyadan yola eşleme

Aşağıdakiler, dosyadan yola eşleme hakkında ayrıntılı bilgi sağlar.

Xml Biçimi

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

Açıklama

map parametresiyle eşleşen tüm dosyalar to parametresinde belirtilen yoldan okunur.

map parametresi için:

  • Dosya adı belirtilmelidir. Yol, isteğe bağlıdır. Herhangi bir yol belirtilmezse herhangi bir klasördeki dosyalar eşleştirilebilir.

  • Dosya adı joker karakterleri desteklenir.

  • Klasör joker karakteri desteklenir.

to parametresi için:

  • Yol belirtilmelidir.

  • Klasör joker karakteri desteklenir.

  • Dosya adı belirtilmemelidir.

    Örnekler

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

Örnek eşleme

Aşağıdaki XML kodu örneği, SolutionPackager aracının herhangi bir web kaynağını ve CRMDevTookitSample adlı bir Geliştirici Araç Seti projesinden oluşturulan iki varsayılan derlemeyi okumasını sağlayan tam bir eşleme dosyasını gösterir.

<?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>  

Yönetilen ve yönetilmeyen çözümler

Dataverse sıkıştırılmış çözüm (.zip) dosyası, burada gösterildiği gibi iki türden biri kullanılarak dışarı aktarılabilir.

Yönetilen çözüm
Kuruluşa aktarılmaya hazır, tamamlanmış bir çözüm. Bileşenler, isteğe bağlı olarak daha fazla özelleştirmeye izin veriyor olsalar da içeri aktarıldıktan sonra eklenemez veya kaldırılamazlar. Bu, çözümün geliştirilmesi tamamlandığında önerilir.

Yönetilmeyen çözüm
Eklenebilecekler, kaldırılabilecekler veya değiştirilebilecekler ile ilgili hiçbir kısıtlama içermeyen açık bir çözüm. Bu, çözüm geliştirme sürecinde önerilir.

Sıkıştırılmış çözüm dosyasının biçimi, türünün yönetilen veya yönetilmeyen olmasına göre farklılık gösterir. SolutionPackager, her iki türdeki sıkıştırılmış çözüm dosyalarını da işleyebilir. Ancak araç, bir türü diğerine dönüştüremez. Yönetilmeyen dosya türünü yönetilene dönüştürme örneğinde olduğu gibi çözüm dosyalarını farklı bir türe dönüştürmenin tek yolu yönetilmeyen çözüm .zip dosyasını bir Dataverse sunucusuna almak ve ardından çözümü bir yönetilen çözüm olarak dışarı aktarmaktır.

SolutionPackager, yönetilmeyen ve yönetilen çözüm .zip dosyalarını /PackageType:İkisi parametresi aracılığıyla birleşik bir set olarak işleyebilir. Bu işlemi gerçekleştirmek için .zip dosyalarını aşağıdaki gibi adlandırarak çözümünüzü iki türde olmak üzere iki kez dışarı aktarmak gerekir.

Yönetilmeyen .zip dosyası: AnyName.zip Yönetilen .zip dosyası: AnyName_managed.zip

Araç, yönetilen zip dosyasının yönetilmeyen dosyayla aynı klasörde olduğunu varsayar ve yönetilen ve yönetilmeyen bileşenlerin farklılıklarını koruyarak her iki dosyayı da tek bir klasöre ayıklar.

Çözüm hem yönetilmeyen hem de yönetilen olarak ayıklandıktan sonra hangi türün oluşturulacağını belirtmek için /PackageType parametresi kullanılarak tek bir klasörden her ikisi veya her tür ayrı ayrı paketlenebilir. Her iki dosyayı da belirtirken, yukarıdaki adlandırma kuralı kullanılarak iki .zip dosyası üretilir. Çift yönetilen ve yönetilmeyen bir klasörden paketleme yaparken /PackageType parametresi eksikse varsayılan, tek bir yönetilmeyen .zip dosyası oluşturulmasıdır.

Sorun Giderme

Çözüm paketi oluşturucusu tarafından oluşturulan kaynak dosyalarını düzenlemek için Visual Studio kullanıyorsanız yeniden paketleme sırasında şuna benzer bir ileti alabilirsiniz: “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.” Bunun nedeni, Visual Studio uygulamasının kaynak dosyanın meta veri etiketlerini veri etiketleriyle değiştirmesidir.

Geçici çözüm

  1. Kaynak dosyasını tercih ettiğiniz metin düzenleyicisinde açın ve aşağıdaki etiketleri bulup güncelleştirin:

    <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> olan düğüm adını <metadata> olarak değiştirin.

    Örneğin, bu dize:

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

    Şu şekilde değişir:

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

    Bu, çözüm paketi oluşturucusunun kaynak dosyasını okumasını ve içeri aktarmasını sağlar. Bu sorunla yalnızca Visual Studio Kaynak düzenleyicisi kullanılırken karşılaşılmıştır.

Ayrıca bkz.

Çözüm Dosyalarıyla Kaynak Denetimi Kullanma

Çözüm kavramları