MSI安装.Net4.6.2 WPF应用后启动提示找不到Microsoft.Xaml.Behaviors程序集
分发自研WPF应用启动报Microsoft.Xaml.Behaviors找不到的解决方案
问题场景
基于.NET Framework 4.6.2开发的WPF应用,引用版本为1.1.39的Microsoft.Xaml.Behaviors.Wpf NuGet包,Debug调试模式下运行完全正常;构建MSI安装包分发后,启动应用始终弹出如下错误:
System.IO.FileNotFoundException: Die Datei oder Assembly "Microsoft.Xaml.Behaviors, Version=1.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" oder eine Abhängigkeit davon wurde nicht gefunden. Das System kann die angegebene Datei nicht finden.
打包前已确认对应.dll文件存放在输出目录的正确路径下。
排查解决步骤
- 检查程序集引用的复制本地配置
不要仅手动拷贝dll到输出目录,大部分MSI打包工具(包括Visual Studio自带安装项目、WiX等)通过扫描项目引用依赖生成打包文件清单,手动放入输出目录的文件不会被自动纳入打包范围。找到项目引用列表中的Microsoft.Xaml.Behaviors,右键打开属性页,将复制本地选项设为True,重新生成项目后再执行打包流程。 - 修复程序集版本绑定重定向
报错提示查找的是1.1.0.0版本的程序集,但实际引用的NuGet包版本为1.1.39,说明项目存在依赖项硬引用了旧版本程序集,绑定重定向配置缺失或未生效。- 打开项目根目录下的
app.config文件,确认存在如下绑定重定向配置:
<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Microsoft.Xaml.Behaviors" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-1.1.39.0" newVersion="1.1.39.0" /> </dependentAssembly> </assemblyBinding> </runtime>- 打开项目属性-应用程序页签,勾选下方的自动生成绑定重定向选项,重新生成项目后确认输出目录下的
[对应应用名].exe.config文件中包含上述配置,再重新打包。
- 打开项目根目录下的
- 校验打包的dll文件正确性
确认纳入MSI包的Microsoft.Xaml.Behaviors.dll版本为1.1.39、公钥令牌与报错提示的b03f5f7f11d50a3a一致,且dll的编译架构(x86/x64/Any CPU)和项目生成目标架构匹配,不要误用其他来源重编译、不匹配架构的同名dll。 - 清理测试环境残留
如果测试机上之前安装过该应用的旧版本,先彻底卸载应用,手动删除安装目录残留文件,同时检查全局程序集缓存(GAC)中是否存在旧版本的Microsoft.Xaml.Behaviors,存在则手动移除,避免程序启动时优先加载GAC中的旧版本导致找不到文件。
内容的提问来源于stack exchange,提问作者KSler
相关产品推荐
相关产品推荐

