PostSharp版本不匹配:构建解决方案时遇程序集加载异常
解决PostSharp版本不匹配导致的AssemblyLoadException
先把你遇到的异常信息明确下来,方便后续排查:
Unhandled exception (4.1.20.0, postsharp.srv.4.0-x86.exe, CLR 4.0.30319.461308, Release): PostSharp.Sdk.CodeModel.AssemblyLoadException: 找不到程序集‘postsharp, version=5.0.42.0, culture=neutral, publickeytoken=b13fd38b8f9c99d7’。[版本不匹配]
从你说已经配置了绑定重定向来看,大概率是配置不完整或者没作用到正确的地方,试试下面这几个亲测有效的步骤:
1. 补全项目app.config的绑定重定向配置
你提到的配置片段里oldVersion只写到了4....,这会导致高版本(比如报错的5.0.42)的重定向规则不生效。把配置补全成这样:
<dependentAssembly> <assemblyIdentity name="PostSharp" publicKeyToken="b13fd38b8f9c99d7" culture="neutral" /> <!-- oldVersion覆盖到报错的5.0.42版本,newVersion设为你项目实际使用的4.1.20 --> <bindingRedirect oldVersion="0.0.0.0-5.0.42.0" newVersion="4.1.20.0" /> </dependentAssembly>
2. 给PostSharp服务进程的配置文件加重定向
这个异常是来自postsharp.srv.4.0-x86.exe这个PostSharp后台服务进程,它会读取自己的配置文件,而非你项目的app.config:
- 找到PostSharp的安装目录,一般是
C:\Program Files (x86)\PostSharp\4.1.20\bin(版本号对应你的4.1.20) - 打开
postsharp.srv.4.0-x86.exe.config,在<runtime>节点下添加和上面完全一致的绑定重定向配置
3. 排查项目依赖的间接引用
有可能是你项目里某个NuGet包间接引用了PostSharp 5.0.42版本,导致编译时触发版本查找:
- 打开NuGet包管理器,查看所有项目的依赖项,找有没有引用高版本PostSharp的包
- 要么把主项目的PostSharp升级到5.0.42版本(保持全局版本一致),要么降级那个依赖包的版本
4. 清理缓存后重新编译
最后别忘了清理项目的bin和obj目录,重启Visual Studio再重新编译——旧的编译缓存经常会导致这种奇怪的版本冲突问题。
内容的提问来源于stack exchange,提问作者Rea B.
相关产品推荐
相关产品推荐

