调用Analysis Services存储过程项目程序集遇加载错误,求解决方案
解决ASStoredProcedures程序集依赖加载失败的问题
你遇到的这个Microsoft.AnalysisServices.Xmla v10.0找不到的问题,结合你已经排查的版本标注异常、权限验证等情况,大概率是程序集版本绑定或者部署配置的问题,给你几个实用的解决思路:
1. 手动添加程序集版本重定向规则
既然你发现dll里的引用标注是v10但实际指向v12,那我们可以强制让SSAS用现有v12版本的dll来响应v10的加载请求:
- 找到SSAS实例的安装目录,默认路径大概是
C:\Program Files\Microsoft SQL Server\MSAS12.MSSQLSERVER\OLAP\Bin - 打开
msmdsrv.exe.config配置文件(记得先备份) - 在
<runtime>节点下插入以下配置代码:
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Microsoft.AnalysisServices.Xmla" publicKeyToken="89845dcd8080cc91" culture="neutral" /> <bindingRedirect oldVersion="10.0.0.0" newVersion="12.0.0.0" /> </dependentAssembly> </assemblyBinding>
- 保存文件后重启SSAS服务,再测试调用
DiscoverXmlMetadataFull存储过程
2. 调整程序集的部署权限与范围
你提到部分对象显示不可用,可能是部署时的权限或范围设置不对:
- 部署程序集时,一定要把权限级别设为
Unrestricted(在SSAS数据库的程序集属性里可以找到这个选项) - 尝试把程序集部署到实例级别而不是单个数据库级别,有些系统依赖项在实例范围内加载会更稳定
- 确认SSAS的服务账号对
OLAP\Bin目录有读取权限,尤其是Microsoft.AnalysisServices.Xmla.dll这个核心依赖文件
3. 自己编译适配SQL Server 2014的版本
既然你已经查看了GitHub源码发现版本标注不规范,不如直接编译一个完全适配的版本:
- 拉取ASStoredProcedures的源码仓库
- 在Visual Studio里打开项目,把所有
Microsoft.AnalysisServices相关的引用替换成SQL Server 2014(v12)官方提供的dll - 检查项目属性里的目标框架,确保和SSAS实例的.NET版本匹配(SQL Server 2014用的是.NET 4.0)
- 编译生成新的dll后重新部署,这样能彻底解决版本标注混乱的问题
4. 验证依赖项的实际存在与版本
用工具进一步确认依赖情况:
- 继续用dotPeak分析你部署的ASStoredProcedures dll,确认
Microsoft.AnalysisServices.Xmla的实际版本要求 - 到SSAS的
OLAP\Bin目录里找到Microsoft.AnalysisServices.Xmla.dll,右键查看属性里的版本号是否确实是v12.0.0.0 - 如果这个文件缺失,可以从SQL Server 2014的安装介质里提取,或者从其他正常运行的同版本SSAS实例里复制
5. 开启SSAS加载日志排查细节
如果上面的方法都没解决,开启详细日志看看具体加载失败的原因:
- 在
msmdsrv.exe.config里添加以下日志配置:
<system.diagnostics> <switches> <add name="AssemblyLoad" value="3" /> </switches> </system.diagnostics>
- 重启SSAS后调用报错的存储过程,然后去
OLAP\Log目录查看日志文件,里面会有程序集加载的详细过程,能帮你找到到底是哪个环节出了问题
这些方案应该能覆盖你遇到的核心问题,从快速的配置调整到彻底的源码编译,一步步排查应该能解决问题。
内容的提问来源于stack exchange,提问作者justin.swenson
相关产品推荐
相关产品推荐

