2010-08-12 55 views
11

我試圖使用維克斯我的第一個自定義操作,我也得到:錯誤2896使用維克斯C#/。NET 4自定義操作

錯誤2896:執行行動CustomActionTest失敗。

我使用Visual Studio 2010,維克斯3.5,64位Windows 7旗艦版,.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

我通過使用/ lvx選項運行我的msi來計算出詳細的日誌記錄。我還必須將我的操作移至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> 

這些鏈接幫助讓我加快速度:

+2

你能解釋一下你把這個條目放在哪裏嗎?如果我理解正確,這通常是你會放在app.config文件中的東西? CA通常是一個DLL程序集,所以這個信息在哪裏去? – 2010-12-19 12:16:02

+6

@Magnus,這個文件進入您的自定義操作程序集,並且必須命名爲CustomAction.config – 2011-05-02 18:43:04

+0

@未來的讀者:確保文件CustomAction.config的構建操作被設置爲「內容」。配置文件的默認值('None')不起作用 – Beemen 2016-05-26 11:58:56

2

作爲一個必然結果KnightsArmy的回答也拋出這個錯誤時,DllEntry屬性CustomAction元素是錯誤的。在我的情況下,我有一個錯字,唯一​​可以從日誌中得到的錯誤信息是臭名昭着的錯誤2896.