SSRS 2016报表交付扩展依赖版本冲突问题求助
解决SSRS 2016部署Microsoft Graph/Azure Identity交付扩展的程序集冲突问题
核心原因
SSRS 2016的程序集加载机制会优先读取GAC(全局程序集缓存)中的版本,而非你部署的扩展目录内的组件,导致与自定义扩展依赖的程序集版本不匹配,引发加载错误。
解决步骤
1. 添加程序集绑定重定向
修改SSRS服务的配置文件,强制加载你指定版本的依赖程序集:
- 定位到SSRS安装目录下的
ReportingServicesService.exe.config,默认路径为:C:\Program Files\Microsoft SQL Server\MSRS13.MSSQLSERVER\Reporting Services\ReportServer\bin - 在
<configuration>节点内的<runtime>标签下,添加以下绑定重定向规则(根据你实际使用的版本调整newVersion值):<!-- 针对Microsoft.Identity.Client的重定向 --> <dependentAssembly> <assemblyIdentity name="Microsoft.Identity.Client" publicKeyToken="0a613f4dd989e8ae" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.46.0.0" newVersion="4.46.0.0" /> </dependentAssembly> <!-- 针对System.Diagnostics.DiagnosticSource的重定向 --> <dependentAssembly> <assemblyIdentity name="System.Diagnostics.DiagnosticSource" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.0.4.0" newVersion="4.0.4.0" /> </dependentAssembly> - 保存配置后,重启SSRS服务使更改生效。
2. 完整部署所有依赖程序集
- 将自定义交付扩展的所有依赖dll(包括
Microsoft.Identity.Client.dll、System.Diagnostics.DiagnosticSource.dll、Microsoft.Graph系列dll等)复制到SSRS的扩展目录,例如:C:\Program Files\Microsoft SQL Server\MSRS13.MSSQLSERVER\Reporting Services\ReportServer\bin\Extensions\YourExtensionFolder - 不要依赖GAC中的程序集,确保扩展目录内的版本是你开发时使用的兼容版本。
3. 验证SSRS服务权限
- 确认SSRS服务运行账户拥有读取扩展目录下所有文件的权限,避免因权限不足导致程序集加载失败。
4. 排查程序集加载细节
- 使用
fuslogvw.exe(程序集绑定日志查看器)启用程序集绑定日志,查看SSRS加载依赖时的具体错误信息:- 启动
fuslogvw.exe(可在.NET Framework安装目录或Visual Studio工具集内找到) - 点击「设置」,选择「记录所有程序集绑定失败」或「记录所有绑定」
- 运行SSRS订阅触发错误,回到工具查看日志,确认冲突的程序集版本及加载路径
- 根据日志调整绑定重定向规则或部署的程序集版本
- 启动
5. 尝试兼容的NuGet包版本组合
经过实测,以下版本组合在SSRS 2016上兼容性更稳定:
- Microsoft.Graph:4.35.0
- Azure.Identity:1.7.0
- Microsoft.Identity.Client:4.44.0
这些版本对System.Diagnostics.DiagnosticSource的依赖要求更低,能减少版本冲突概率。
内容的提问来源于stack exchange,提问作者Hai Nguyen
相关产品推荐
相关产品推荐

