Ошибка 2896 при использовании настраиваемого действия WiX C#/.NET 4
Я пытаюсь использовать свое первое пользовательское действие в 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 ответа
Я понял это, запустив msi с параметром /lvx, чтобы получить подробное ведение журнала. Мне также пришлось перенести действие в раздел InstallExecuteSequence, чтобы получить содержательное сообщение об ошибке. Когда звонок в ЦС был в кнопке, ничего значащего не было возвращено.
<InstallExecuteSequence>
<Custom Action='CustomActionTest' After='InstallFinalize' />
</InstallExecuteSequence>
System.BadImageFormatException: не удалось загрузить файл или сборку "JudgeEdition" или одну из ее зависимостей. Эта сборка создается средой выполнения, более новой, чем текущая загруженная среда, и не может быть загружена.
Я изменил атрибут useLegacyV2RuntimeActivationPolicy на true. Все стало хорошо работать.
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" />
</startup>
</configuration>
Эти ссылки помогли мне освоиться:
Как следствие KnightsArmy, эта ошибка также генерируется, когда атрибут DllEntry в элементе CustomAction неверен. В моем случае у меня была опечатка, и единственной информацией об ошибках, которую я мог получить из журнала, была печально известная ошибка 2896.
У меня такой же код ошибки, но основная причина в том, что один из методов Custom Action выдает исключение. Если вы не пишете try-catch, а пишете содержательные сообщения об ошибках. Журнал MSI просто сообщит вам об ошибке #.
Ура