2009-10-19 15 views
18

Üçüncü tarafa ait .NET DLL dosyasına bağımlı bir CustomAction C# DLL dosyası oluşturmak istiyorum (bu örnekte, MySql.Data.dll numaralı telefon). Aşağıda WiX parçası ile çalışan C# özel eylem DLL dosyası var. Sadece özel harekata güvenli bir şekilde nasıl bağımlılık ekleyeceğimi anlamaya çalışıyorum. Not: Çalıştırılacak uygulama için aslında bu üçüncü taraf DLL dosya dosyasına ihtiyacım yok. Bağımlılıklar içeren bir WiX özel eylem DLL dosyası nasıl çalıştırılır

<Binary Id="MyCustomAction.dll" SourceFile="MyCustomAction.CA.dll" /> 

    <CustomAction Id="FixupConfigForMysql" Return="check" /> 

    <InstallExecuteSequence> 
    <Custom Action='FixupConfigForMysql' After='InstallFiles'>NOT Installed</Custom> 
    </InstallExecuteSequence> 

Ben özel eylem çalıştırmak için almak için üçüncü taraf DLL dosyası ( MySql.Data.dll) yüklemeniz gerekir mi?

Üçüncü taraf DLL dosyasıyla başka bir ikili etiket ekleyebilir miyim?

cevap

19

WiX araç setindeki DTF, özel eylem derlemenizi ve tüm referanslarını tek bir ikiliye (temel olarak kendi kendine ayıklanan dll) dahil edecek bir mekanizmaya sahiptir. Yönetilen özel eylemler yazmam (C/C++, daha az bağımlılıkla özel eylemler oluşturur ve başarı oranını artırır), ancak yalnızca VS içinde çalışılırken çalışması gerekir.

+8

Bu, yalnızca bu bağımlılıkları ekleyen özel eylem oluşturma işlemi tanıtıcıları nedeniyle işe yaramış görünüyor. Doğru şekilde anlarsam, Özel Eylem oluşturma tarafından oluşturulan .CA.dll dosyasının bir parçası olurlar. http://blogs.msdn.com/jasongin/archive/2008/05/23/custom-action-project-templates.aspx –

+4

@AdamTegen Bu makaleyi gönderdiğiniz için teşekkür ederiz duvar! Önemli satır şöyle: "Özel eylem oluşturma işlemi, CA'nızın bağlı olduğu GAC'd olmayan tüm montajları otomatik olarak paketler" Geliştirme kutumda GAC'de tüm bağımlı derlemelerim vardı ve neden yapmadıklarını anlayamadım. " Test kutusunda mevcut gibi görünüyor. Teşekkürler! –

+2

Diğerlerine bir not olarak, 'Binary' öğenizin WiX'in ürettiği '.CA.dll 'dosyasına işaret ettiğinden ve özgün .NET DLL'sinin bulunmadığından emin olun. – Cocowalla

4

Özel eylemleri çalıştırmak için gerekli olan dosyaları eklemek için <Binary />'u kullanabilirsiniz. Bu da gereken herhangi bir 3. parti dlls için gitmeli. İkili eleman kullanılarak eklenen dosyalar sadece kurulum sırasında kullanılır ve kurulmakta olan uygulamanın bir parçası olarak görülmez.

Güncelleştirme: CustomAction ve Binary arasındaki bağlantı binaryKey özniteliğini kullanarak özel eylemden ikili eyleme başvurmak suretiyle yapılır.

Eğer sadece bir ikili bağlı bir özel eylem olabilir (bu denemedim ve doğrudan MSI custom action table bunun için herhangi bir destek görmüyor) birden BinaryKey nitelikleri olabilir sürece

. Bu ikili, bu nedenle gerekli tüm bağımlılıkları kendi içinde taşımalıdır.

Dedi ki, eğer tüm sistemlerin hepsi .Net meclisleri ise, bir tek montajda paketlemek için ILMerge'u kullanmak bir fikir olurdu.

+1

Bu işe yaramaz. Ekstra ikili akışların hiçbiri çıkarılmaz. –

3

Visual Studio'daki True (Sabit referans) 'Referans Yerel' özelliğini ayarlayın.

1

Sayın Mensching'in yorumunu takiben, biraz daha ayrıntılı bir şekilde dolduracağım.

En az Wix 3.0 üzerinde olduğunuzu varsayarak, bağımlılıkları tek bir DLL'de paketlemek için MakeSfxCA.exe'yi kullanabilirsiniz. (Bu, DFT - Dağıtım Araçları Vakfı'ndan bir eklenti idi.) Temel olarak, projenin bağımlı DLL'lerinizi kopyaladığından emin olarak başlayın. CustomAction.config dosyası oluşturun. çalıştığını kez

REM MyMakeSfxCA.bat - Run under $(TargetDir); abs. paths reqd. 
"%WIX%\SDK\MakeSfxCA"^
    %cd%\Managed_custom_action_pkg.dll^
    "%WIX%\SDK\x86\sfxca.dll"^
    %cd%\Managed_custom_action.dll^
    %cd%\Dependent1.dll^
    %cd%\Dependent2.dll^
    %cd%\Microsoft.Web.Administration.dll^
    %cd%\Microsoft.Deployment.WindowsInstaller.dll^
    %cd%\CustomAction.config 

, bir Post-Yapı Olay dönüştürmek: gibi basit bir .bat dosyası ile test

: En .wxs dosyasında

"$(WIX)\SDK\MakeSfxCA"^
    $(TargetDir)\Managed_custom_action_pkg.dll^
    "$(WIX)\SDK\x86\sfxca.dll"^
    $(TargetDir)\Managed_custom_action.dll^
    $(TargetDir)\Dependent1.dll^
    $(TargetDir)\Dependent2.dll^
    $(TargetDir)\Microsoft.Web.Administration.dll^
    $(TargetDir)\Microsoft.Deployment.WindowsInstaller.dll^
    $(TargetDir)\CustomAction.config 

, senin İkili Anahtar benzeyecek

<Binary Id="Managed_custom_action_CA_dll" 
     SourceFile="$(var.Managed_custom_action.TargetDir)$(var.Managed_custom_action.TargetName)_pkg.dll" /> 

CustomAction.config için, çevrimiçi örnekleri bulabilirsiniz.

Bu, bulduğum en iyi yoldur.

İlgili konular