报告定义具有无效的目标命名空间rsInvalidReportDefinition。

26
我使用Visual Studio数据工具2015创建了一个报告项目。当我使用报告向导创建报告.rdl文件时,rdl文件的模式为2016年。我的报告服务器版本是12.0.4213.0。如何创建与我的报告服务器兼容的报告.rdl文件?我尝试通过右键单击项目->属性并将TargetServerVersion更改为"Sql server 2008 R2、2012或2014"来更改,但这也不起作用。
7个回答

93

编辑:只要不使用任何2016功能,您设置为TargetServerVersion属性的报告特定版本将在BIN(\debug或您构建的任何其他位置)文件夹中创建。

我也在试图找到相同的答案。你会认为简单地设置解决方案的TargetServerVersion就会导致它使用正确的报告定义(或者他们可以选择给你添加一个pre-2016报告项的选项)

在那之前,如果您右键单击.rdl并查看代码,则可以更改以下行以使其在SQL 2014中工作-只需备份原始.rdl以防犯错误:

1)用以下内容替换报告xmlns行:

<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">

2) 移除 ReportSections 和 ReportSection 行,保留它下面的子树结构 body 标签等内容。因此,请移除以下内容:

  <ReportSections>
    <ReportSection>

而这些是我们所拥有的最重要的财富。

    </ReportSection>
  </ReportSections>

3) 删除整个ReportParametersLayout部分。因此(例如),删除此部分:

  <ReportParametersLayout>
    <GridLayoutDefinition>
      <NumberOfColumns>4</NumberOfColumns>
      <NumberOfRows>2</NumberOfRows>
    </GridLayoutDefinition>
  </ReportParametersLayout>

点击保存,返回设计页面并运行报表。如果您没有修改设计,则可以在SQL2014中正常工作。但是一旦您更改了任何字段,它就会恢复到2016架构。

如果有人发现解决此问题的方法,请告诉我们。谢谢!


2
谢谢!你真是个大神。这个问题困扰我们已经有一段时间了。 - BossWalrus
2
当您构建报表时,它会将您所针对的正确版本的xml(在TargetServerVersion属性中)放入\bin文件夹中。您需要上传的是**那个**文件而不是您正在编辑的文件,命名空间和功能将保持不变。(注意-在\bin目录中的文件是使用[右键单击部署]时部署的rdl文件)。 - Trubs
英雄解决方案。谢谢。 - Hemant Ramphul
非常感谢。这节省了我的一天。它对于版本2008R2非常有用。 - lanshare

8
通过以下步骤,您可以从Visual Studio以多种不同的格式获得报告:
  1. 在项目属性页面中将TargetServerVersion设置为所需的格式(在本例中为SQL Server 2008 R2、2012或2014)。
  2. 构建项目。
  3. 在生成输出文件夹中(也可以在项目属性页面中指定:Build => OutputPath),找到所需格式的rdl文件。
请注意:请勿删除html标签。

1
这是正确的答案,我一直在项目根文件夹中选择rdl文件,但实际上是输出文件才能获得我的服务器所需的正确命名空间/版本!干杯! - Alex

7
我写了一个简单的PowerShell脚本,遵循已接受答案的思路。
$file = (Get-Content "InputFileNameHere.rdl") 

# Unwraps the Body and the Page element. 
# Simple string replacement
$file = $file -replace '<ReportSections>',""
$file = $file -replace '<ReportSection>',""
$file = $file -replace '</ReportSection>',""
$file = $file -replace '</ReportSections>',""

# Parse the XML doc
$xml = [xml]$file;

# Set the XML namespace
$xml.Report.xmlns = "http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition";

# Delete ReportParametersLayout node    
$xml.Report.RemoveChild($xml.Report.ReportParametersLayout);

# Save the file
Set-Content -Value $xml.OuterXml -Path "OutputFilenameHere.rdl"

将第一行编辑以匹配您的输入文件和最后一行,将其保存为something.ps,运行并上传新文件。


谢谢,这很有用。它也适用于像我正在使用的RDLC文件。我建议将文件路径放入变量中,并像PS1文件一样从脚本中运行: $path = "$PSScriptRoot\Invoice.rdlc" $file = (Get-Content $path) - robbpriestley

4
在我的情况下,当我添加参数到RDLC设计时,在运行时系统抛出异常,报告定义具有无效的目标命名空间。 我刚刚卸载了微软报表查看器v 12.0,并安装了最新的nugetpackages版本15的Microsoft.ReportingServices.ReportViewerControl.Winforms。 安装后,我的问题得到了解决。整个晚上都在解决这个问题。 问题是由于我使用的是旧版报表查看器,在VS 17中发生了。

2

尝试这个链接中的步骤,对我有效:

Error while uploading a report
  1. 在SSDT 2016中,将目标SQL版本设置为SQL Server 2008 R2、2012或2014
  2. 清理解决方案
  3. 重新构建解决方案
  4. 复制Bin\debug文件夹的内容,并用它替换主文件夹的内容(确保备份)
  5. SSRS 2010应该能够呈现您的项目

你真是个天才,非常感谢你,你帮我省了很多压力! - Eddy Jawed

2

将报告代码中含有2016的第二行替换为以下内容:

<Report 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">

请定位到 ReportParametersLayout 部分并将其删除。点击减号显示一行,右键剪切。
上述四个报告从Crystal转换为版本16时已被修复,但我应该选择版本10

1
我遇到了同样的问题...解决方法是删除报表查看器10.0.0.0版本,并替换为适当的15.0.0.0版本。

enter image description here

我删除了 Report Viewer 的旧引用 在此输入图像描述

并从 NuGet 安装了新的引用 在此输入图像描述

现在,引用的版本已更改为 15.0.0.0 在此输入图像描述

然后它正常工作了。


1
这个效果非常好!谢谢 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接