2010-08-12 25 views
11

Estoy tratando de usar mi primera acción personalizada en WiX y me sale:.Error 2896 usando un WiX C#/.NET acción personalizada 4

de error 2896: la ejecución de la acción CustomActionTest falló.

Estoy utilizando Visual Studio 2010, WiX 3.5, de 64 bits de Windows 7 Ultimate, .NET Framework 4.

Éstos son lo que creo que son las secciones pertinentes:

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

De la acción:

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

y el archivo de configuración de la acción personalizada:

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

Y finalmente he utilizado una referencia de proyecto en mi proyecto de WiX para la acción personalizada. No estoy seguro de lo que estoy haciendo mal.

Respuesta

15

Lo descubrí ejecutando mi msi con la opción/lvx para obtener un registro detallado. También tuve que mover mi acción a la sección InstallExecuteSequence para obtener un mensaje de error significativo. Cuando la llamada a la CA estaba en PushButton no se devolvía nada significativo.

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

System.BadImageFormatException: No se pudo cargar el archivo o ensamblado 'JudgeEdition' o uno de sus dependencias. Este ensamblado está creado por un tiempo de ejecución más nuevo que el tiempo de ejecución cargado actualmente y no se puede cargar.

Cambié el atributo useLegacyV2RuntimeActivationPolicy a verdadero. Todo comenzó a funcionar bien.

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

Estos enlaces ayudaron a que yo a la velocidad:

+2

¿Puede explicar dónde coloca estas entradas de ? Si entiendo correctamente, esto normalmente es algo que pondría en el archivo app.config? La CA generalmente es un ensamblado de DLL, entonces, ¿a dónde va esta información? –

+6

@Magnus, este archivo va en el ensamblado de acciones personalizadas y debe llamarse CustomAction.config –

+0

@future readers: asegúrese de que el archivo CustomAction.config tenga su acción de compilación establecida en 'Contenido'. El valor predeterminado para los archivos de configuración ('Ninguno') no funcionará – Beemen

2

Como corolario de KnightsArmy 's responder a este error también se produce cuando la DllEntry Atributo en el CustomAction elemento está mal. En mi caso tuve un error tipográfico y la única información de error que pude obtener del registro fue el infame error 2896.

Cuestiones relacionadas