Wix Toolset v3.11缺失AssemblyDefaultWixExtensionAttribute问题求助
核心问题梳理
你当前遇到的Microsoft.Tools.WindowsInstallerXml.AssemblyDefaultWixExtensionAttribute加载错误,加上CustomAction无法运行,主要是由函数名不匹配、错误打包依赖DLL、无效自定义操作这几个问题导致的,以下是针对性修复步骤:
1. 修复CustomAction入口函数名称不匹配
在Product.wxs里你定义的CustomAction入口是Netload,但C#代码里的函数名是CustomAction,这直接导致Windows Installer找不到执行入口,是最关键的错误。
修改Product.wxs中的CustomAction定义:
<CustomAction Id="Netload" BinaryKey="eContactNetloadBinary" DllEntry="CustomAction" Execute="deferred" Return="check" />
2. 删除不必要的依赖DLL打包
你在Product.wxs里把Microsoft.Deployment.WindowsInstaller.dll作为组件打包到安装包,但这个DLL是Wix工具集的编译依赖,不需要部署到用户机器——CustomAction运行时会由Windows Installer自动加载对应的系统依赖。
删除以下组件定义:
<Component Id="Microsoft.Deployment.WindowsInstaller.dll" Guid="******"> <File Id="Microsoft.Deployment.WindowsInstaller.dll" Name="Microsoft.Deployment.WindowsInstaller.dll" Source="Dependencies\Microsoft.Deployment.WindowsInstaller.dll" KeyPath="yes" /> </Component>
3. 移除无效的CustomActions.wxs操作
CustomActions.wxs里尝试直接运行DLL("[INSTALLFOLDER]eContactNetload.dll" /register)是完全错误的——.NET类库DLL不能直接作为可执行文件运行,这个自定义操作毫无意义,还会引发额外错误。
直接删除整个CustomActions.wxs文件,或者移除其中的所有内容。
4. 解决AssemblyDefaultWixExtensionAttribute加载错误
这个报错通常是依赖版本不匹配或项目配置问题导致的:
- 确保
eContactNetload项目引用的是Wix v3.11安装目录下的C:\Program Files (x86)\WiX Toolset v3.11\bin\Microsoft.Deployment.WindowsInstaller.dll,不要用NuGet包或其他版本的文件。 - 检查
eContactNetload项目的目标框架:Wix v3.11推荐用.NET Framework 4.0/4.5,避免用过高版本。 - 把该DLL的
Copy Local属性设为False(右键引用→属性),不需要复制到输出目录,Wix编译时会自动处理。
5. 补充:Deferred CustomAction的注意事项
你的CustomAction是延迟执行的,需要额外注意:
- 代码中
FindLispFile和GetAutoCADVersion函数要确保能正确定位路径,避免因权限或版本检测失败导致安装终止。 - 如果需要写入系统目录,延迟执行的CustomAction默认拥有系统权限,不需要额外配置,但要处理好文件读写异常。
验证步骤
- 清理所有项目的输出目录
- 重新生成
eContactNetload和eContactDeveloper项目 - 生成
eContactInstaller项目,检查是否还存在原报错 - 测试安装包,确认AutoCAD的LSP文件是否正确添加了NETLOAD命令
内容的提问来源于stack exchange,提问作者bagofmilk

