我有一个WIX安装程序,可以在安装过程中执行自定义操作。当我运行WIX安装程序并遇到第一个自定义操作时,安装程序失败,我在MSI日志中收到错误,如下所示:
动作开始12:03:53:LoadBCAConfigDefaults。 SFXCA:将自定义操作提取到临时目录:C:\ DOCUME~1 \ ELOY06~1 \ LOCALS~1 \ Temp \ MSI10C.tmp- \ SFXCA:绑定到CLR版本v2.0.50727 调用自定义操作WIXCustomActions!WIXCustomActions.CustomActions.LoadBCAConfigDefaults 错误:无法从程序集加载自定义操作类WIXCustomActions.CustomActions:WIXCustomActions System.BadImageFormatException:无法加载文件或程序集“WIXCustomActions”或其依赖项之一。此程序集由比当前加载的运行时更新的运行时构建,无法加载。 文件名称:'WIXCustomActions' 在System.Reflection.Assembly._nLoad(AssemblyName fileName,String codeBase,Evidence assemblySecurity,Assembly locationHint,StackCrawlMark& stackMark,Boolean throwOnFileNotFound,Boolean forIntrospection) 在System.Reflection.Assembly.nLoad(AssemblyName fileName,String codeBase,Evidence assemblySecurity,Assembly locationHint,StackCrawlMark& stackMark,Boolean throwOnFileNotFound,Boolean forIntrospection) 在System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef,Evidence assemblySecurity,StackCrawlMark& stackMark,Boolean forIntrospection) 在System.Reflection.Assembly.InternalLoad(String assemblyString,Evidence assemblySecurity,StackCrawlMark& stackMark,Boolean forIntrospection) 在System.AppDomain.Load(String assemblyString) 在Microsoft.Deployment.WindowsInstaller.CustomActionProxy.GetCustomActionMethod(会话会话,字符串assemblyName,String className,String methodName)
...上面的具体问题是“System.BadImageFormatException:无法加载文件或程序集'WIXCustomActions'或其依赖项之一。此程序集由比当前加载的运行时更新的运行时构建,无法加载。 “
该错误的含义似乎表明某些内容类似于错误引用的.NET框架或其他内容(我的自定义操作及其依赖项中的目标是3.5),但我无法弄清楚在哪里进行更改解决这个问题。有什么想法吗?
....不确定这是否有帮助,但我运行的CustomActions包批处理文件创建包含自定义操作函数的.dll包:
===============
调用“C:\ Program Files \ Microsoft Visual Studio 10.0 \ VC \ vcvarsall.bat”
@echo on
cd“C:\ development \ trunk \ PortalsDev \ csharp \ production \ Installers \ WIX \ customactions \ PAServicesWIXCustomActions”
csc / target:library / r:“C:\ program files \ windows installer xml v3.6 \ sdk \ microsoft.deployment.windowsinstaller.dll”/ r:“C:\ development \ trunk \ PortalsDev \ csharp \ production \ Installers \ WIX \ customactions \ PAServicesWIXCustomActions \ bin \ Debug \ eLoyalty.PortalLib.dll“/ out:”C:\ development \ trunk \ PortalsDev \ csharp \ production \ Installers \ WIX \ customactions \ PAServicesWIXCustomActions \ bin \ Debug \ WIXCustomActions .dll“CustomActions.cs
cd“C:\ Program Files \ Windows Installer XML v3.6 \ SDK”
makesfxca“C:\ development \ trunk \ PortalsDev \ csharp \ production \ Installers \ WIX \ customactions \ PAServicesWIXCustomActions \ bin \ Debug \ BatchCustomerAnalysisWIXCustomActionsPackage.dll”“c:\ program files \ windows installer xml v3.6 \ sdk \ x86 \ sfxca.dll“”C:\ development \ trunk \ PortalsDev \ csharp \ production \ Installers \ WIX \ customactions \ PAServicesWIXCustomActions \ bin \ Debug \ WIXCustomActions.dll“customaction.config Microsoft.Deployment.WindowsInstaller.dll
答案 0 :(得分:2)
我固定了它!
问题是在package.bat文件中运行的csc实际上是框架的2.0版本...
我更改了批处理文件以运行位于c:\ WINDOWS \ Microsoft.NET \ v3.5 \中的那个文件,该文件位于v2.0.xxxxx文件夹中,并且现在可以正常运行而不会抛出此错误..
答案 1 :(得分:1)
BadImageFormatException
很可能表示安装程序中x86和x64代码之间存在不匹配。
如果您的MSI是32位,请确保自定义操作项目的平台目标设置为x86,否则,如果您的安装程序是64位,请将其设置为x64。
答案 2 :(得分:0)
检查MSI项目的启动条件是否显示正确的.net版本
答案 3 :(得分:0)
当引用的自定义操作目标框架未安装时,会发生这种情况。
因此,如果可能,您可以更改自定义操作项目的目标框架,或check for .NET Framework Version。
答案 4 :(得分:0)
我有一个类似的问题但是使用.net 4.6 我的自定义DLL是使用.net 4.6构建的,但如果没有安装,则程序包将失败,如上所述。 对我来说问题是自定义操作在条件之前运行,以检查是否安装了.net 4.6。所以我把代码更改为:
<Custom Action="MyCustomAction" After="LaunchConditions">