字典中不存在给定键 - Visual studio SSDT 部署

The given key was not present in the dictionary - Visual studio SSDT Deploy

我在 Visual Studio 2017 年有一个 SSDT 项目,多个报告使用共享数据源。我可以构建所有报告,还可以通过刷新数据的能力来预览它们。但是,当我单击部署时,我收到错误消息

错误:字典中不存在给定的键。

我已经检查了项目部署详细信息,例如(目标服务器详细信息、目标报告文件夹等),它们都是正确的。谁能建议调试此错误的最佳方法? Visual Studio Error Deployment Settings

在您的 .rdl 文件旁边的报表项目目录中有一个 .rdl.data 文件。如果您关闭报表设计器,删除该文件,然后再次尝试预览,希望对您有所帮助。

我在使用从 VS2017 15.3.5 中的扩展和更新安装的 Microsoft Reporting Services 1.17 时遇到了完全相同的问题。我用 Visual Studio 调试并用 JetBrains dotPeek 反编译,这指向 Microsoft.ReportingServices.BuildProcess.dll 中的错误。 URL 正在字典中查找连接属性。据我所知,这本字典永远不会被填充。 解决方案是卸载扩展并安装 SSDT for Visual Studio 2017 (15.3.0 preview).

感谢大家的反馈。我发现了该错误,并将在下一版本的 Reporting Services VSIX 中发布修复程序。

谢谢, 马特

我遇到了同样的问题。问题是当我部署我的报告并尝试通过 URL 访问它时我没有遇到任何问题,但是当我尝试以编程方式访问它时浏览器启动此错误 'The given key was not present in the dictionary'。我调查并发现我未在代码中将可见性标志设置为 'false'。

https://msdn.microsoft.com/en-us/library/microsoft.reporting.webforms.reportparameter.aspx

ReportParameter(字符串、字符串、布尔值)
使用名称、值和可见性标志实例化新的 ReportParameter。

最后,我的代码是这样的:

            this.rptViewer.Reset();

            rptViewer.ProcessingMode = Microsoft.Reporting.WebForms.ProcessingMode.Remote;
            MyReportServerCredentials credencial = new MyReportServerCredentials();
            rptViewer.ServerReport.ReportServerCredentials = credencial;

            this.rptViewer.ServerReport.ReportServerUrl = new System.Uri(this.ReportServerUrl);
            this.rptViewer.ServerReport.ReportPath = ReportUrl;

            this.rptViewer.ServerReport.ReportServerUrl = new System.Uri(this.ReportServerUrl);
            this.rptViewer.ServerReport.ReportPath = ReportUrl;

            ReportParameter p1 = new ReportParameter("param1", new string[] { null }, false);
            ReportParameter p2 = new ReportParameter("param2", new string[] { null }, false);
            ReportParameter p3 = new ReportParameter("param3", new string[] { null }, false);
            ReportParameter p4 = new ReportParameter("param4", new string[] { null }, false);


            this.rptViewer.ServerReport.SetParameters(new ReportParameter[] { p1, p2, p3, p4 });

            this.rptViewer.AsyncRendering = false;
            this.rptViewer.SizeToReportContent = true;
            this.rptViewer.ServerReport.Refresh();

希望对您有所帮助!