You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# WiX自定义操作报错:无法加载Microsoft.Win32.TaskScheduler程序集

WiX自定义操作加载Microsoft.Win32.TaskScheduler程序集失败的解决方案

针对你遇到的自定义操作无法加载第三方程序集的问题,以下是几个可行的解决思路:

1. 将依赖程序集嵌入自定义操作程序集

这是最省心的方案,直接把依赖的Microsoft.Win32.TaskScheduler.dll合并到自定义操作的DLL中:

  • 给自定义操作项目安装NuGet包Costura.Fody,编译时它会自动将所有依赖的第三方程序集嵌入到输出DLL里,避免运行时找不到文件。
  • 确保自定义操作项目中对Microsoft.Win32.TaskScheduler的引用设置复制本地为True。

2. 切换到Deferred模式并确保依赖已部署

你的自定义操作当前用的是Execute.immediate,这个阶段在文件复制到目标目录前执行,依赖的DLL还没被安装,自然加载失败:

  • 修改自定义操作的执行模式为deferred,同时指定工作目录为安装目录:
    var runAfterInstallAction = new ElevatedManagedAction(
        CustomActions.RunAfterInstall, Return.check, When.After, Step.InstallFinalize, Condition.NOT_Installed) 
    { 
        Execute = Execute.deferred,
        WorkingDirectory = "APPLICATIONFOLDER", // 替换为你的安装目录属性名
        ActionAssembly = typeof(CustomActions).Assembly.Location
    };
    
  • 确保Microsoft.Win32.TaskScheduler.dll被包含在安装文件列表中,比如通过Files元素复制到目标目录:
    new Dir(@$"%ProgramFiles%\{AppName}",
        new Files($@"{binPath}\*.*"), // 确保binPath下包含TaskScheduler的DLL
        // ...其他元素
    );
    

3. 正确配置Binary元素(不合并程序集时)

如果不想合并程序集,需要把依赖的DLL添加到WiX的Binary表中,并确保加载路径正确:

  • 先将依赖DLL添加到Binary:
    project.AddBinary(new Binary("TaskSchedulerDll", @"绝对路径\Microsoft.Win32.TaskScheduler.dll"));
    
  • 同时确保自定义操作的工作目录指向依赖DLL所在的位置(比如安装目录),且执行模式为deferred。

4. 检查兼容性

  • 确认自定义操作项目的目标平台(x86/x64)与WiX项目、Microsoft.Win32.TaskScheduler的平台一致,避免位数不兼容。
  • 检查自定义操作项目的.NET Framework版本,确保与依赖程序集的要求版本匹配。

内容的提问来源于stack exchange,提问作者Eduard G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 12:40:09