我在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年,但都没有奏效。
我可以去看看有效的定义吗?
答案 0 :(得分:44)
我实际遇到了一个类似的问题,我需要进行的更改会导致&#34;未记录的错误/无效的RDL结构&#34; 2016年的错误,所以我编辑了RDL文件,以便我可以在早期版本中打开它并进行更改。不太难,但你需要进行一些标签编辑。
对于新报告,您可能只使用旧版本,但对于现有报告,您可以执行此操作:(我已恢复为2008年)
实际上写了一些超级代码作为博客文章的一部分,但手动编辑很简单。
答案 1 :(得分:23)
以下设置应设置为SSRS的特定版本,然后从\ bin 目录中获取 RDL
或者,在更新TargetServerVersion之后,只需使用rdl中的right click | deploy
。
接受的答案明显更难/容易出错/不可能在多个版本的ssrs中工作,并且每次更改rdl时都需要应用。
答案 2 :(得分:5)
我最近也遇到过这个问题。我发现我只需要更改有问题的.rdl文件中的两个项目。
更改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”
与其他回复不同,我需要2010而不是2008.我会检查您已部署的.rdl文件。
注意:如果我删除了ReportSections块,则它不会像其他人注意到的那样工作。
答案 3 :(得分: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#桌面应用程序中遇到问题,请参阅以下答案:
答案 7 :(得分:0)
最简单直接的解决方案。我建议您在当前项目的“管理NuGet程序包”中找到Microsoft.ReportingServices.ReportViewerControl.WebForms并将此dll版本更新为最新版本。
从VS菜单导航:工具> NuGet软件包管理器>管理解决方案的NuGet软件包