La acción personalizada en C # utilizada a través de WiX falla con el error 1154

Estoy usando WiX 3.5.1930 en Visual Studio 2010, dirigido a .NET Framework 3.5. (Las versiones semanales posteriores de WiX parecen estar muy rotas con respecto a su plantilla de acción personalizada, al menos por ahora. 1930 es la versión más reciente que parece crear un C # CA con referencias de trabajo).

Tengo dos conjuntos de acciones personalizadas escritos en C #. Uno de ellos funciona bien. El otro falla con el siguiente error:

CustomActionnNameHere returned actual error code 1154 (note this may not be 100% accurate if translation happened inside sandbox)

Comparé los archivos .csproj y los archivos .wixproj, y lo mejor que puedo decir es que las diferencias son apropiadas (por ejemplo, la lista de archivos .cs incluidos). He cambiado los .wxs que no funcionan para llamar a la acción personalizada de trabajo en lugar de la acción personalizada que no funciona y funciona como epxected.

¿Qué más puedo mirar para que esto funcione?

Editar: para completar 1154 se refiere a un archivo DLL no válido: net helpmsg lo traduce (en inglés) a "Uno de los archivos de biblioteca necesarios para ejecutar esta aplicación está dañado".

Segunda edición: ejecutó peverify contra el dll (tomó una copia de \ windows \ installer mientras se ejecutaba el instalador) y dice que todo está bien en el dll. La DLL solo tiene el método de acción personalizado con un "retorno exitoso", por lo que no hay mucho que verificar, pero confirma que la DLL no está dañada.

Tercera edición: el código en la acción personalizada rota sigue:

using Microsoft.Deployment.WindowsInstaller;

namespace Framework.Installer.Database {
    public class CustomActions {

        [CustomAction]
        public static ActionResult RunMigration(Session session) {

            return ActionResult.Success;
        }

    }
}

No mucho. Las partes relevantes de los .wxs son las siguientes:

<InstallExecuteSequence>
  <Custom Action="DotNetMigratorCustomActionPreviousUp" After="SetMigrationPropertiesPreviousUp"><![CDATA[(&Database = 3)]]></Custom>
</InstallExecuteSequence>

<Binary Id="DotNetMigratorCustomActionDll"
        SourceFile="$(var.Framework.Installer.Database.CustomActions.TargetDir)\SoftwareAnswers.Framework.Installer.Database.CustomActions.dll" />

<CustomAction Id="DotNetMigratorCustomActionPreviousUp"
              Return="check"
              BinaryKey="DotNetMigratorCustomActionDll"
              DllEntry="RunMigration"
              Execute="deferred" />

Respuestas a la pregunta(7)

Su respuesta a la pregunta