Ошибка 2896 при использовании настраиваемого действия WiX C # /. NET 4 - PullRequest
11 голосов
/ 12 августа 2010

Я пытаюсь использовать свое первое настраиваемое действие в WiX и получаю:

Ошибка 2896: сбой при выполнении действия CustomActionTest.

Я использую Visual Studio 2010, WiX 3.5, 64-битная Windows 7 Ultimate, .NET Framework 4.

Вот, что я думаю, соответствующие разделы:

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

Из действия:

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

И файл конфигурации из настраиваемого действия:

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

И, наконец, я использовал ссылку проекта в своем проекте WiX на настраиваемое действие.Я не уверен, что я делаю неправильно.

Ответы [ 2 ]

16 голосов
/ 12 августа 2010

Я понял это, запустив msi с параметром / lvx, чтобы получить подробное ведение журнала.Мне также пришлось переместить мое действие в раздел InstallExecuteSequence, чтобы получить осмысленное сообщение об ошибке.Когда вызов CA был в PushButton, ничего значащего не возвращалось.

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

System.BadImageFormatException: Не удалось загрузить файл или сборку 'JudgeEdition' или одну из ее зависимостей.Эта сборка создается средой выполнения, более новой, чем текущая загруженная среда, и не может быть загружена.

Я изменил атрибут useLegacyV2RuntimeActivationPolicy на true.Все стало хорошо работать.

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

Эти ссылки помогли мне освоиться:

4 голосов
/ 07 июня 2012

Как следствие ответа KnightsArmy , эта ошибка также генерируется, когда атрибут DllEntry в элементе CustomAction неверен.В моем случае у меня была опечатка, и единственной информацией об ошибках, которую я мог получить из журнала, была печально известная ошибка 2896.

...