2010-08-12 15 views
11

Próbuję użyć mój pierwszy niestandardową akcję w WiX i dostaję.Błąd 2896 przy użyciu WiX C#/.NET 4 niestandardową akcję

Błąd 2896: Wykonywanie działanie CustomActionTest powiodło się.

Używam Visual Studio 2010, WiX 3.5, 64-bitowy Windows 7 Ultimate, .NET Framework 4.

Oto co myślę są odpowiednie sekcje:

<Binary Id="JudgeEditionCA" SourceFile="..\JudgeEditionCA\bin\Debug\JudgeEdition.CA.dll" /> 
<CustomAction Id="CustomActionTest" BinaryKey="JudgeEditionCA" DllEntry="CustomActionOne" Execute="immediate"/> 

<Control Id="Next" Type="PushButton" X="248" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.WixUINext)" > 
    <Publish Event="DoAction" Value="CustomActionTest">1</Publish> 
    <Publish Event="DoAction" Value="InvalidClientDesc">CLIENT_DESC_VALID = "0"</Publish> 
    <Publish Event="NewDialog" Value="VerifyReadyDlg">CLIENT_DESC_VALID = "1"</Publish> 
</Control> 

Od akcja:

namespace JudgeEditionCA 
{ 
    public class CustomActions 
    { 
     [CustomAction] 
     public static ActionResult CustomActionOne(Session session) 
     { 
      return ActionResult.Success; 
     } 
    } 
} 

a plik konfiguracyjny z akcji niestandardowej:

<configuration> 
    <startup useLegacyV2RuntimeActivationPolicy="false"> 
     <supportedRuntime version="v4.0" /> 
    </startup> 
</configuration> 

I wreszcie użyłem referencji projektu w moim projekcie WiX do niestandardowej akcji. Nie jestem pewien, co robię źle.

Odpowiedz

15

Zorientowałem się, uruchamiając mój msi z opcją/lvx, aby uzyskać pełne rejestrowanie. Musiałem również przenieść moją akcję do sekcji InstallExecuteSequence, aby uzyskać znaczący komunikat o błędzie. Kiedy wywołanie do CA było w PushButton, nic nie zostało zwrócone.

<InstallExecuteSequence> 
    <Custom Action='CustomActionTest' After='InstallFinalize' /> 
</InstallExecuteSequence> 

System.BadImageFormatException: Nie można załadować pliku lub zestawu 'JudgeEdition' lub jeden z jego zależnościami. Ten zespół jest budowany przez środowisko wykonawcze nowsze niż obecnie załadowane środowisko wykonawcze i nie można go załadować.

Zmieniono atrybut useLegacyV2RuntimeActivationPolicy na true. Wszystko zaczęło działać ładnie.

<configuration> 
    <startup useLegacyV2RuntimeActivationPolicy="true"> 
     <supportedRuntime version="v4.0" /> 
    </startup> 
</configuration> 

Te linki pomógł dostać mnie do prędkości:

+2

Czy możesz wyjaśnić, gdzie umieścić te wpisy ? Jeśli rozumiem poprawnie, zwykle jest to coś, co można umieścić w pliku app.config? CA jest zwykle zbiorem DLL, więc gdzie są te informacje? –

+6

@Magnus, plik ten znajduje się w zespole niestandardowych działań i musi mieć nazwę CustomAction.config –

+0

@future readers: upewnij się, że plik CustomAction.config ma ustawioną akcję kompilacji "Treść". Domyślne dla plików konfiguracyjnych ("Brak") nie będzie działać – Beemen

2

Jako następstwo KnightsArmy „s odpowiedzieć Ten błąd jest również generowany, kiedy DllEntry Atrybut na CustomAction element jest nieprawidłowy. W moim przypadku miałem literówkę i jedyne informacje o błędach, które mogłem uzyskać z dziennika, to niesławny błąd 2896.

Powiązane problemy