2010-08-12 4 views
11

Я пытаюсь использовать свой первый заказ действие в WiX, и я получаю:.Ошибка 2896 с помощью WiX C#/NET 4 пользовательских действий

ошибки 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 для пользовательского действия. Я не уверен, что я делаю неправильно.

ответ

15

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

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

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

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

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

Эти ссылки помогли получить меня до скорости:

+2

Не могли бы вы объяснить, где вы разместили эту запись ? Если я правильно понимаю, это обычно что-то, что вы бы поместили в файл app.config? CA обычно представляет собой сборку DLL, поэтому, где эта информация идет? –

+6

@Magnus, этот файл находится в вашей сборке пользовательских действий и должен быть назван CustomAction.config –

+0

@future reader: убедитесь, что файл CustomAction.config имеет действие сборки, установленное в «Содержимое». По умолчанию для файлов конфигурации («Нет») не будет работать – Beemen

2

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