偶然发现一个晦涩的问题。发布此内容是因为我对堆栈溢出的搜索没有找到我的答案。希望这对其他人有帮助。
问题: 我的报告服务报告将编译,但在运行时会出现以下错误:
[BC30456] 'RdlObjectModel' is not a member of 'Reporting Services'
这是在我将整个 tablix 从一份报告复制/粘贴到另一份报告后发生的。
在我撤消更改并删除 tablix 后,它再次工作。
我复制/粘贴的带有 Tablix 的原始报告工作正常。
找到这个错误报告,它准确地解释了我遇到的问题:
上述摘要:当您将报告服务表达式从一个位置复制/粘贴到另一个位置时(我复制了整个 Tablix,其中包含表达式),该表达式的所有部分都会扩展为其全名。当您复制/粘贴包含“Cstr()”的表达式时,存在一个特定的错误。它得到的全名无法正确解析。
幸运的是,即使您的报告中有大量此类表达式,这也很容易解决。 --转到“查看”>“代码” 查找“RdlObjectModel”或“Cstr”。您正在寻找这样的东西:
Microsoft.ReportingServices.RdlObjectModel.ExpressionParser.VBFunctions.Cstr([your expression here])
-删除从“Microsoft”到“Cstr”的所有内容,如下所示:
Cstr([your expression here])
-保存。当您首先复制/粘贴表达式时,您基本上已经撤消了报告服务如此“有帮助”地尝试执行的操作。
我刚刚遇到了类似的问题,但它是与另一个转换函数 - CDEC 相关的。我的猜测是,使用转换组中的任何函数(可能还有其他函数)都会出现类似的问题。
我自己想出了办法,并删除了愚蠢的编辑器添加的 Microsoft.ReportingServices.RdlObjectModel.ExpressionParser.VBFunctions。。显然,它在复制任何其他对象时添加了完全限定的愚蠢 dotNET 表示法。
不幸的是,微软的那些混蛋已将此错误标记为“永远不会修复”(就像大多数微软错误一样)。
如果有人偶然发现这个问题 - 我通过将数据集中的字段从 fieldname 重命名为 fieldname1 来修复此问题,然后在字段的表达式中反映这一点。