2010-08-12 4 views
11

Ich versuche, meine erste benutzerdefinierte Aktion in WiX und ich zu verwenden:.Fehler 2896 mit einer WiX C#/NET 4 benutzerdefinierten Aktion

Fehler 2896: failed Ausführen Aktion CustomActionTest.

ich Visual Studio 2010, WiX bin mit 3.5, 64-Bit-Windows 7 Ultimate, .NET Framework 4.

sind hier, was ich denke sind die entsprechenden Abschnitte:

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

Aus die Aktion:

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

und die Konfigurationsdatei aus der benutzerdefinierten Aktion:

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

Und schließlich habe ich einen Projektverweis in meinem WiX Projekt auf die benutzerdefinierte Aktion verwendet. Ich bin mir nicht sicher, was ich falsch mache.

Antwort

15

ich es dachte, meine msi aus mit der Option/LVX Option, indem Sie eine ausführliche Protokollierung zu erhalten. Ich musste meine Aktion auch in den InstallExecuteSequence-Abschnitt verschieben, um eine sinnvolle Fehlermeldung zu erhalten. Als der Anruf bei der CA im PushButton war wurde nichts sinnvolles zurückgegeben.

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

System.BadImageFormatException: Konnte Datei oder Assembly 'JudgeEdition' oder eine ihrer Abhängigkeiten laden. Diese Assembly wird von einer Laufzeit erstellt, die neuer ist als die aktuell geladene Laufzeit und kann nicht geladen werden.

änderte ich das useLegacyV2RuntimeActivationPolicy Attribut auf true. Alles hat gut funktioniert.

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

geholfen Diese Links mir Geschwindigkeit aufstehen:

+2

Können Sie mir bitte erklären, wo Sie diese setzen Einträge? Wenn ich das richtig verstehe, würden Sie das normalerweise in die app.config-Datei schreiben. Die CA ist normalerweise eine DLL-Assembly. Wohin geht diese Information? –

+6

@Magnus, diese Datei in Ihrer benutzerdefinierten Aktionen geht Montage und muss CustomAction.config –

+0

@future Leser genannt werden: Stellen Sie sicher, dass die Datei CustomAction.config hat seine Aktion Build ‚Inhalt‘ gesetzt. Der Standardwert für Konfigurationsdateien ('None') funktioniert nicht – Beemen

2

Als logische Folge KnightsArmy ist dieser Fehler beantworten wird auch ausgelöst, wenn die DLLEntry Attribut auf dem Custom Element ist falsch. In meinem Fall hatte ich einen Tippfehler und der einzige Fehler Informationen, die ich aus dem Protokoll bekommen konnte, war der berüchtigte Fehler 2896.

Verwandte Themen