Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
SolutionPackager, Microsoft Dataverse sıkıştırılmış bir çözüm dosyasını birden çok XML dosyasına ve diğer dosyalara dönüştürebilen 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österilmektedir.
Important
SolutionPackager aracı, artık çözümlerin ambalajını kaldırmak ve paketlemek için önerilen bir yol değildir. SolutionPackager aracının özellikleri Power Platform CLI'sına eklenir. komutupac solution, , unpack, packve clone gibi syncSolutionPackager aracının aynı temel özelliklerini içeren birçok fiil içerir.
SolutionPackager aracını nerede bulabilirim?
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.
- NuGet paketini indirin.
- Paket dosya adı uzantısını .nupkg'den .zip'e değiştirin.
- Sıkıştırılmış (zip) dosyasının içeriklerini ayıklayın.
<extracted-folder-name>/contents/bin/coretools klasöründe SolutionPackager.exe yürütülebilir dosyasını bulun. Programı coretools klasöründe çalıştırın veya bu klasörü YOLUNUZA ekleyin.
SolutionPackager komut satırı parametreleri
SolutionPackager, aşağıdaki tabloda tanımlanan parametrelerle çağrılabilen bir komut satırı aracıdır.
| Argument | Description |
|---|---|
| /action: {Çıkart|Paketlemek} | 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: <dosya yolu> | 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: <klasör yolu> | 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: {Yönetilmeyen|Yönetilen|Her ikisi de} | Optional. İş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 "Both" değeri belirtildiğinde, yönetilen ve yönetilmeyen çözüm .zip dosyaları tek bir klasörden üretilir. Daha fazla bilgi için bu makalede daha sonra açıklanan yönetilen ve yönetilmeyen çözümlerle çalışma bölümüne bakın. |
| /allowWrite:{Evet|Hayır} | Optional. 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. Çıkarma işlemi, mevcut dosyaların üzerine yazılmadan veya silinmeden güvenli bir şekilde değerlendirilebilir. |
| /allowDelete:{Evet|Hayır|Komut istemi} | Optional. 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:Prompt belirtildiğinde, kullanıcıdan konsol aracılığıyla tüm silme işlemlerine izin vermesi veya reddetmesi istenir. /allowWrite:Hayır şeklinde belirtildiğinde /allowDelete:Evet şeklinde belirtilmiş de olsa silme eylemi gerçekleşmez. |
| /clobber | Optional. 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 silinmez. |
| /errorlevel: {Off|Error|Warning|Info|Verbose} | Optional. Varsayılan değer Bilgi'dir. Bu bağımsız değişken, gönderilecek günlük bilgilerinin düzeyini gösterir. |
| /map: <dosya yolu> | Optional. Dosya eşleme yönergeleri içeren bir .xml dosyasının yolu ve adı. Ayıklama sırasında kullanıldığında, genellikle /folder parametresi tarafından belirtilen klasörün içinden okunan dosyalar, eşleme dosyasında belirtildiği gibi alternatif konumlardan okunur. Paket işlemi sırasında, yönergelerle eşleşen dosyalar yazılmaz. |
| /nologo | Optional. Çalışma zamanında banner'ı gizleyin. |
| /log: <dosya yolu> | Optional. Günlük dosyasının yolu ve adı. Dosya zaten mevcutsa, yeni kayıt bilgileri dosyaya eklenir. |
| <@ dosya yolu> | Optional. Araç için komut satırı bağımsız değişkenleri içeren bir dosyanın yolu ve adı. |
| /sourceLoc: <string> | Optional. 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 argüman kullanıldığında, belirtilen yerel ayardan alınan 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 biçimini kullanabilirsiniz: /src. |
| /localize | Optional. Tüm dize kaynaklarını .resx dosyalarına çıkarın veya 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 |
| /ÇözümAdı: <name> | Optional. Kaynak klasör altında birden çok çözüm olduğunda paketleme veya ayıklama yapılacak çözümün benzersiz adı solutions/*/solution.yml. Birden fazla çözüm algılandığında gereklidir. Yalnızca YAML kaynak denetimi biçimi için geçerlidir. Komutun kısa biçimini kullanabilirsiniz: /sn. |
| /remapPluginTypeNames | Optional. Belirtildiğinde, eklenti tam nitelikli tür adları, çözümde bulunan derlemelere göre yeniden eşleştirilir. YAML kaynak denetimi biçiminde varsayılan olarak etkindir. Komutun kısa biçimini kullanabilirsiniz: /fp. |
Kaynak denetim dosyası biçimleri
SolutionPackager, çözümleri ayıklama ve paketleme sırasında iki klasör düzenini destekler.
XML biçimi (eski)
Özgün biçim. Çözümün meta verileri Other\Solution.xml ve Other\Customizations.xml içinde depolanır, ve tüm bileşen dosyaları bu dosyalarla birlikte düz bir klasör hiyerarşisine çıkarılır. Bu biçim, daha fazla yapılandırma olmadan dosya .zip ayıklanırken varsayılan biçimdir.
YAML kaynak denetimi biçimi
Dataverse Git tümleştirmesi ile birlikte sunulan bu biçim, çözüm meta verilerini yapılandırılmış klasör hiyerarşisi arasında dağıtılan YAML dosyaları olarak depolar. Power Apps'ta yerel Git tümleştirmesiyle çözümleri işlediğinizde yazılan formattır.
XML biçimine göre avantajlar
- Kaynak kod yönetiminde bileşen bazında daha net ve okunaklı fark raporları oluşturur
- Tek bir depo klasöründe birden çok çözümü destekler
- Tuval uygulaması
.msappdosyaları ve modern akışlar yalnızca bu biçimde desteklenir - Eklenti türü adı yeniden eşlemesi varsayılan olarak etkindir
Gerekli klasör yapısı
<rootFolder>/
├── solutions/
│ └── <SolutionUniqueName>/
│ ├── solution.yml (solution metadata)
│ ├── solutioncomponents.yml (paths to all component files)
│ ├── rootcomponents.yml (root-level components)
│ └── missingdependencies.yml (dependency info)
├── publishers/
│ └── <PublisherUniqueName>/
│ └── publisher.yml (publisher definition)
├── entities/ (entity components, if present)
├── workflows/ (classic workflows, if present)
├── modernflows/ (Power Automate cloud flows, if present)
├── canvasapps/ (canvas app .msapp files, if present)
└── [other component folders]/
Important
YAML biçimi, dosyaları içeren solutions/ bir *solution.yml alt klasörün varlığıyla otomatik olarak algılanır.
YAML bildirim dosyalarınız (solution.yml, solutioncomponents.ymlvb.) altında solutions/<SolutionUniqueName>/değil klasörün köküne yerleştirilirse, araç YAML biçimini algılamaz. Araç XML yoluna geri döner ve eksik Customizations.xml ile ilgili yanıltıcı bir hata raporlar. Bu sorunu giderme hakkında bilgi için bkz. Sorun giderme .
Daha fazla bilgi: Çözüm YAML kaynak denetimi biçimi başvurusu
Otomatik algılama kurallarını biçimlendirme
| Condition | Kullanılan biçim |
|---|---|
solutions/*/solution.yml bulundu — tam olarak bir çözüm |
ÇÖZÜM adının klasörden çıkarıldığı YAML biçimi |
solutions/*/solution.yml bulundu — birden çok çözüm |
YAML biçiminde /SolutionName argümanının gerekli olduğu durumlar |
Alt dizin mevcut değil solutions/ |
XML biçimi (eski) |
YAML biçim klasörünü paketleme
Aşağıdaki komut bir YAML biçim klasörü paketler.
SolutionPackager.exe /action:Pack /zipfile:MySolution.zip /folder:C:\repos\myrepo
Çok çözümlü bir klasörden paketleme
Aşağıdaki komut, belirtilen çözümü çok çözümlü bir klasörde paketler.
SolutionPackager.exe /action:Pack /zipfile:SolutionA.zip /folder:C:\repos\myrepo /SolutionName:SolutionA
/map komutunun bağımsız değişkenini kullanın
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. /map parametresini ekleyerek, SolutionPackager aracı bu tür dosyaları genellikle olduğu gibi Extract klasörünün içinden değil, alternatif konumlardan okumaya ve paketlemeye 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 direktifler için eşit olarak geçerlidir.
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.
"**" joker karakteri, "herhangi bir alt klasörde" anlamına gelir. Yalnızca yolun son bölümü olarak kullanılabilir, örneğin: "c:\folderA\**".
Dosya adı joker karakterleri yalnızca "*.ext" veya "*.*" biçimlerinde kullanılabilir. Başka bir desen desteklenmez.
Üç tür yönerge eşlemesi, bunların nasıl kullanılacağını gösteren bir örnekle birlikte burada açıklanmıştı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" />
Tanım
"folderA" ile eşleşen dosya yolları "folderB" olarak değiştirilir.
Her birinin altındaki alt klasörlerin hiyerarşisi tam olarak aynı olmalıdır.
Klasör joker karakterleri desteklenmez.
Hiçbir dosya adı belirtilemez.
Examples
<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" />
Tanım
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ı. Herhangi bir yol belirtilmezse, herhangi bir klasördeki dosyalar eşleştirilebilir.
Dosya adı joker karakterleri desteklenmez.
Klasör joker karakteri desteklenir.
toparametresi için:Dosya adı ve yolu belirtilmelidir.
Dosya adı,
mapparametresindeki addan farklı olabilir.Dosya adı joker karakterleri desteklenmez.
Klasör joker karakteri desteklenir.
Examples
<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 paketi örneğinde, cr886_PluginPackageTest.nupkg dosyası belirtilen konumda zaten mevcutsa bu dosya üzerine yazılmaz.
Dosyadan yola eşleme
Aşağıda, dosya-yol eşlemesi hakkında ayrıntılı bilgi verilmektedir.
XML Biçimi
<FileToPath map="path\filename.ext" to="path" />
Tanım
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ı. 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:
Bir yol belirtilmelidir.
Klasör joker karakteri desteklenir.
Dosya adı belirtilmemelidir.
Examples
<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 kod örneği, SolutionPackager aracının herhangi bir web kaynağını ve CRMDevTookitSample adlı bir Geliştirici Araç Seti projesinden varsayılan olarak oluşturulan iki derlemeyi okumasını sağlayan eksiksiz 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 subfolders -->
<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. İçeri aktarıldıktan sonra bileşenler eklenemez veya kaldırılamaz, ancak isteğe bağlı olarak daha fazla özelleştirmeye izin verebilirler. Bu, çözümün geliştirilmesi tamamlandığında önerilir.
Yönetilmeyen çözüm
Nelerin eklenebileceği, kaldırılabileceği veya değiştirilebileceği konusunda herhangi bir kısıtlama olmayan açık bir çözüm. Bu, bir çözümün geliştirilmesi sırasında ö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ı işleyebilir. Ancak araç bir türü başka bir türe 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:Both parametresi aracılığıyla birleşik bir küme olarak işleyebilir. Bu işlemi gerçekleştirmek için, çözümünüzü her tür olarak iki kez dışarı aktarmanız ve .zip dosyalarını aşağıdaki gibi adlandırmanız 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.
Bir çö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 parametresini kullanarak bu tek klasörden her ikisini de veya her türü ayrı ayrı paketlemek mümkündür. 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 yapılırken /PackageType parametresi eksikse, varsayılan olarak tek bir yönetilmeyen .zip dosyası oluşturulur.
Sorun giderme
Kaynak dosyalarını düzenlemek için Visual Studio kullanılırken görüntülenen ileti
Çözüm paketleyicisi tarafından oluşturulan kaynak dosyalarını düzenlemek için Visual Studio kullanırsanız, şunun gibi 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." Bu durum, Visual Studio kaynak dosyasının meta veri etiketlerini veri etiketleriyle değiştirdiği için oluşur.
Workaround
Kaynak dosyasını sık kullandığınız metin düzenleyicide açın ve aşağıdaki etiketleri bulun ve güncelleyin:
<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"><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 paketleyicisinin kaynak dosyasını okumasına ve içeri aktarmasına olanak tanır. Bu sorun yalnızca Visual Studio Kaynak düzenleyicisi kullanılırken gözlemlenmiştir.
Hata: YAML klasörüyle "Gerekli dosya ...\Other\Customizations.xmlbulunamıyor"
SolutionPackager'ı (veya pac solution pack) gibi solution.ymlYAML dosyalarını içeren bir klasörde çalıştırdığınızda ancak bu dosyalar gerekli solutions/<SolutionUniqueName>/ alt klasörün içine değil klasörün köküne yerleştirildiğinde bu hata görüntülenir.
Neden: Araç, dosyaları içeren bir solutions/ alt klasör arayarak YAML kaynak denetimi biçimini algılar *solution.yml . Bu dizin olmadığında, araç sessizce XML (eski) biçimine geri döner ve bekler Other\Customizations.xml. Sonuçta elde edilen hata iletisi bir XML dosyasına başvurur ve yanıltıcı olan YAML'den bahsetmez.
Düzeltmek: YAML bildirim dosyalarının doğru yolların altında olması için klasörü yeniden düzenleme:
<rootFolder>/
solutions/<YourSolutionUniqueName>/ ← move solution.yml here
solution.yml
solutioncomponents.yml
rootcomponents.yml
missingdependencies.yml
publishers/<YourPublisherUniqueName>/
publisher.yml
Klasörü bir Git tümleştirmesi işlemesinden veya pac solution cloneiçinden aldıysanız, klasör yapısı zaten doğru olmalıdır. Üst düzey YAML dosyalarını içeren ancak solutions/ alt dizini bulunmayan bir klasör, eksik bir ayıklamayı temsil eder ve doğrudan paketlenemez.
Uyarı: rootcomponents.yml'de bildirilen bileşenin kaynak dosyası yok
Bu uyarı, tuval uygulaması gibi bir bileşen içinde rootcomponents.yml listelendiğinde ancak beklenen bileşen klasöründe karşılık gelen kaynak dosya bulunmadığında (örneğin, canvasapps/<schema-name>/) görüntülenir.
Etkisi: Araç yine başarılı olur (çıkış kodu 0) ve geçerli .zip bir dosya oluşturur, ancak bildirilen bileşen paketlenmiş çözümden atlanır.
Neden: Klasör kısmi bir ayıklama tarafından oluşturuldu veya bileşenin kaynak dosyaları depoya dahil edilmedi. Örneğin, yalnızca çözüm bildirim dosyaları işlendi, tuval uygulaması ise işlenmedi.
Düzeltmek: içinde rootcomponents.yml bildirilen tüm bileşenlerin klasörde karşılık gelen kaynak dosyaları olduğundan emin olun. Tuval uygulamaları için .msapp dosyasının canvasapps/<schema-name>/ altında bulunması gerekir. Eksik dosyalar varsa, tam çözümü Dataverse'ten yeniden dışa aktarın ve yeniden paketinden çıkarın veya tam bir ayıklama elde etmek için pac solution clone kullanın.