.NET多框架解决方案Wix安装报错0x80070643求助
我的解决方案包含.NET Framework 4.8、.NET Standard和.NET 6程序集,安装生成的特定.exe工件时失败,抛出以下异常:
Error 1001. Unable to get installer types in the
\service.exe assembly.--> Unable to load one or more request types.
安装日志同时显示Error 0x80070643: Failed to install MSI package,但应用在Visual Studio中运行正常。
当前Wix配置如下:
针对.NET Framework和.NET Standard程序集的配置:
<Component Id="__Device_dll" Guid="{9C75189F-BE83-4227-A798-F00C76F27CE6}"> <File Id="__Device_dll" Name="Device.dll" KeyPath="yes" Assembly=".net" AssemblyManifest="_Device_dll" AssemblyApplication="Device_dll" DiskId="1" Source="$(var.SourceDir)\Device.dll" /> </Component>
针对.NET 6程序集的配置:
<Component Id="Process_Executor_exe" Guid="{0D8D84F1-FFC5-28F6-F1D7-8620DA17313B}"> <File Id="Process_Executor_exe" Name="SProcess.Executor.exe" Source="$(var.SimulationSourceDir)\Process.Executor.exe" /> </Component>
请问这是Wix配置存在遗漏导致的吗?
Error 1001通常和.NET安装程序类加载失败直接相关,结合混合多个.NET版本的场景,重点排查以下几个方面:
1. .NET 6程序集的Wix配置缺失关键属性
如果SProcess.Executor.exe是带有安装程序类(比如继承自System.Configuration.Install.Installer)的可安装组件(如Windows服务),当前配置未标记正确的.NET类型属性。Wix中,.NET Framework程序集用Assembly=".net",而.NET Core/.NET 5+程序集需要用Assembly=".netcore",同时需补充AssemblyApplication和KeyPath属性。修改后的配置如下:
<Component Id="Process_Executor_exe" Guid="{0D8D84F1-FFC5-28F6-F1D7-8620DA17313B}"> <File Id="Process_Executor_exe" Name="SProcess.Executor.exe" Source="$(var.SimulationSourceDir)\Process.Executor.exe" Assembly=".netcore" AssemblyApplication="Process_Executor_exe" KeyPath="yes" /> </Component>
若该exe不是带安装程序类的组件,可跳过Assembly属性;但如果是服务类exe,必须正确配置,否则Windows Installer无法识别并加载对应的安装逻辑。
2. 依赖程序集未完全打包
“无法加载一个或多个请求类型”的核心原因是安装时service.exe找不到依赖的dll,需检查:
- 所有被service.exe引用的.NET Standard、.NET Framework、.NET 6程序集是否都已添加到Wix的Component中,确保安装时被复制到目标目录;
- 若.NET 6程序集是框架依赖部署(FDD),需确认目标机器已安装.NET 6运行时;若是独立部署(SCD),要把生成的所有依赖文件(包括runtime目录下的文件)都加入安装包。
3. 安装程序类的版本兼容性问题
.NET Core/.NET 5+的安装程序类和.NET Framework的实现存在差异,Windows Installer默认的InstallUtil工具无法完美兼容.NET 6的安装程序类。建议改用Wix原生的ServiceInstall和ServiceControl元素部署服务,完全避开.NET版本兼容问题。
4. Wix版本兼容性
确保使用的Wix版本支持.NET 6,比如Wix 3.11及以上版本对.NET Core/.NET 5+的支持更完善,旧版本可能无法正确识别.NET 6程序集的属性。
内容的提问来源于stack exchange,提问作者Aditya Dalai

