使用 WiX C#/.NET 4 自定义操作时出现错误 2896
Posted
技术标签:
【中文标题】使用 WiX C#/.NET 4 自定义操作时出现错误 2896【英文标题】:Error 2896 using a WiX C#/.NET 4 custom action 【发布时间】:2011-03-28 23:48:44 【问题描述】:我正在尝试在 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 项目中对自定义操作使用了项目引用。我不确定我做错了什么。
【问题讨论】:
【参考方案1】:我通过使用 /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>
这些链接帮助我快速了解:
What does 'useLegacyV2RuntimeActivationPolicy' do in the .NET 4 config? http://www.marklio.com/marklio/PermaLink,guid,ecc34c3c-be44-4422-86b7-900900e451f9.aspx【讨论】:
你能解释一下你把这个作为KnightsArmy 的回答的必然结果,当 CustomAction 元素上的 DllEntry 属性错误时也会引发此错误。就我而言,我有一个错字,我能从日志中得到的唯一错误信息是臭名昭著的错误 2896。
【讨论】:
【参考方案3】:我得到了相同的错误代码,但根本原因是自定义操作方法之一引发了异常。如果您不编写 try-catch 并编写有意义的错误消息。 MSI 日志只会告诉您错误#。
干杯
【讨论】:
以上是关于使用 WiX C#/.NET 4 自定义操作时出现错误 2896的主要内容,如果未能解决你的问题,请参考以下文章
为啥不推荐使用 JScript 在 WiX 中实现自定义操作?
将Wix 3.0迁移到Wix 4.0时出现错误:WXCP0006:此节点前的空格不正确(WhitespacePrecedingNodeWrong)