升级RestSharp后VSTO插件遇System.Text.Json程序集异常
疑问解答
1. csproj引用版本与NuGet包版本差异是否正常?
正常。System.Text.Json的NuGet包版本(如7.0.2)和程序集文件版本号(如7.0.0.2)遵循微软版本策略:NuGet包版本包含补丁号,程序集的主/次版本号与NuGet包一致,修订号和构建号固定为0.2(针对7.x系列),两者不存在冲突,属于正确引用状态。
2. 需要重点检查的内容
程序集绑定重定向配置
由于VSTO插件运行在Outlook进程中,易出现跨程序集版本冲突,需确保插件的app.config(编译后为[插件名称].dll.config)中添加正确的绑定重定向规则,将所有版本的System.Text.Json重定向到项目实际引用的版本:<configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.Text.Json" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-8.0.0.2" newVersion="7.0.0.2" /> </dependentAssembly> </assemblyBinding> </runtime> </configuration>注意:
newVersion需与csproj中引用的程序集版本一致,publicKeyToken必须为cc7b13ffcd2ddd51(System.Text.Json官方公钥)。依赖文件完整性与输出目录检查
- 执行
Clean Solution清理项目后重新生成,检查项目输出目录(bin/Debug/bin/Release)中是否存在对应版本的System.Text.Json.dll,且文件版本与引用版本匹配; - 检查NuGet本地缓存(默认路径
%userprofile%\.nuget\packages\system.text.json)中对应版本的包是否完整,若损坏则删除后重新安装。
- 执行
RestSharp依赖冲突排查
打开NuGet包管理器的「管理解决方案的NuGet包」,查看RestSharp 110.2.0的依赖项中指定的System.Text.Json版本,确保项目引用的版本与之兼容;若存在版本差异,优先通过绑定重定向统一版本,而非强行升级/降级NuGet包。VSTO加载目录验证
调试时,通过Visual Studio调试窗口的「模块」面板查看插件dll的加载路径,确认该目录下存在正确版本的System.Text.Json.dll,避免因文件未复制导致加载失败。目标框架兼容性检查
切换至.NET Framework 4.7.1后,需确认所有NuGet包(包括System.Text.Json、RestSharp)均支持该框架版本,避免因目标框架不匹配导致程序集清单冲突(FileLoadException)。
内容的提问来源于stack exchange,提问作者HHeckner

