SSRS报告定义比服务器更新

时间:2016-08-11 16:48:31

标签: sql-server reporting-services ssrs-2012

我在Visual Studio 2015中创建了一些包含所有最新更新的报告。但是,当我尝试部署报告时,我收到此消息:

  

此报告的定义无效或受此版本Reporting Services的支持   11:40:28错误
  报表定义可能是使用更高版本的Reporting Services创建的,也可能包含非中的内容   11:40:28错误
  格式正确或基于Reporting Services架构无效。详细信息:报告定义具有无效目标
  11:40:28错误
  命名空间' http://schemas.microsoft.com/sqlserver/reporting/2016/01/reportdefinition'无法升级的。

.rdl文件的第一行设置如下:

<?xml version="1.0" encoding="utf-8"?>
<Report MustUnderstand="df" 
xmlns="http://schemas.microsoft.com/sqlserver/reporting/2016/01/reportdefinition" 
xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner" 
xmlns:df="http://schemas.microsoft.com/sqlserver/reporting/2016/01/reportdefinition/defaultfontfamily">

我可以更改架构定义吗?如果是这样,到底是什么?我尝试过将2016年改为2014年或2012年,但都没有奏效。

我可以去看看有效的定义吗?

8 个答案:

答案 0 :(得分:44)

我实际遇到了一个类似的问题,我需要进行的更改会导致&#34;未记录的错误/无效的RDL结构&#34; 2016年的错误,所以我编辑了RDL文件,以便我可以在早期版本中打开它并进行更改。不太难,但你需要进行一些标签编辑。

对于新报告,您可能只使用旧版本,但对于现有报告,您可以执行此操作:(我已恢复为2008年)

  • 更改报告代码:
  • 删除整个&#34; ReportParametersLayout&#34;块。
  • 删除&#34; df&#34;标签及其内容。
  • 删除&#34; ReportSections&#34;和#34; ReportSection&#34;打开和关闭标签(不是内容)。

实际上写了一些超级代码作为博客文章的一部分,但手动编辑很简单。

答案 1 :(得分:23)

以下设置应设置为SSRS的特定版本,然后从\ bin 目录中获取 RDL

或者,在更新TargetServerVersion之后,只需使用rdl中的right click | deploy

接受的答案明显更难/容易出错/不可能在多个版本的ssrs中工作,并且每次更改rdl时都需要应用。

enter image description here

答案 2 :(得分:5)

我最近也遇到过这个问题。我发现我只需要更改有问题的.rdl文件中的两个项目。

  1. 更改FROM:

    报告xmlns =“http://schemas.microsoft.com/sqlserver/reporting/2016/01/reportdefinition”xmlns:rd =“http://schemas.microsoft.com/SQLServer/reporting/reportdesigner”

    TO:

    报告xmlns:rd =“http://schemas.microsoft.com/SQLServer/reporting/reportdesigner”xmlns:cl =“http://schemas.microsoft.com/sqlserver/reporting/2010/01/componentdefinition”的xmlns = “http://schemas.microsoft.com/sqlserver/reporting/2010/01/reportdefinition”

  2. 与其他回复不同,我需要2010而不是2008.我会检查您已部署的.rdl文件。

    1. 删除“ReportParametersLayout”块。
    2. 注意:如果我删除了ReportSections块,则它不会像其他人注意到的那样工作。

答案 3 :(得分:4)

我遇到了同样的问题,这就是我解决它的方法,

  1. 设置&#34; TargetServerVersion&#34;报告项目属性上的属性是旧版本的报告服务器。
  2. 构建项目。
  3. 在bin文件夹中获取报告并部署到旧的报告服务器。
  4. 您的源报告格式和命名空间将更新为最新版本。但是将构建bin文件夹报告以与目标报告服务器版本兼容。

答案 4 :(得分:1)

我已将此任务自动化了。

使用名为&#34; TextBoxFile&#34;的文本框创建一个表单。和一个按钮。 在点击按钮的代码中:

    Dim xmlDoc As New XmlDocument()
    xmlDoc.Load(TextBoxFile.Text)
    Dim root = xmlDoc.DocumentElement 

    For Each elel As XmlNode In root.ChildNodes
        Debug.WriteLine(elel.Name & " " & elel.NodeType)
    Next

    If root.Attributes()("xmlns").Value <> "http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition" Then
        root.Attributes()("xmlns").Value = "http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition"
    End If

    Dim nsmgr = New XmlNamespaceManager(xmlDoc.NameTable)
    nsmgr.AddNamespace("bk", "http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition")

    Dim autoRefreshElements = root.GetElementsByTagName("AutoRefresh")
    While autoRefreshElements.Count > 0
        root.RemoveChild(autoRefreshElements(0))
    End While

    Dim ReportParametersLayout = root.GetElementsByTagName("ReportParametersLayout")
    While ReportParametersLayout.Count > 0
        root.RemoveChild(ReportParametersLayout(0))
    End While

    Dim ReportSections = root.GetElementsByTagName("ReportSections")

    If ReportSections.Count > 0 Then
        ' Move content of ReportSections just below the block.
        Dim ReportSection = ReportSections(0).ChildNodes()

        ' First, copy the elements after
        Dim precedent = ReportSections(0)
        For Each child As XmlNode In ReportSection(0).ChildNodes
            Dim clone = child.Clone
            root.InsertAfter(clone, precedent)
            precedent = clone
        Next

        ' After deleting the existing block
        While ReportSections.Count > 0
            root.RemoveChild(ReportSections(0))
        End While
    End If

    xmlDoc.Save(TextBoxFile.Text) 

    MsgBox("Ok")

答案 5 :(得分:1)

切换到VS2017并安装Report Designer版本14.2时,我遇到了相同的问题。

对我来说,只需3个步骤即可解决此问题。

1:设置将xmlns更改为“ http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition

2:删除ReportSections”和“ ReportSection”(仅标签)。

3:删除报告ReportParametersLayout部分。

您唯一需要记住的就是将xmlns指向2008/01

更改为2008/01并尝试运行报告后,错误消息中还会显示其他2个步骤。

答案 6 :(得分:1)

如果您在使用LocalReport(RDLC)的Visual Studo 2017 C#桌面应用程序中遇到问题,请参阅以下答案:

https://stackoverflow.com/a/45149488/6732525

答案 7 :(得分:0)

最简单直接的解决方案。我建议您在当前项目的“管理NuGet程序包”中找到Microsoft.ReportingServices.ReportViewerControl.WebForms并将此dll版本更新为最新版本。

从VS菜单导航:工具> NuGet软件包管理器>管理解决方案的NuGet软件包