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

时间:2016-03-28 22:48:32

标签: sql-server visual-studio reporting-services ssrs-2012 sql-server-2012-datatools

我使用Visual Studio数据工具2015创建了一个ReportProject。当我使用报表向导创建report.rdl文件时,rdl文件具有2016的架构。我的报表服务器版本为12.0.4213.0。

如何创建与我的报告服务器兼容的report.rdl。我尝试通过右键单击项目来更改TargetServerVersion - >属性并将targetserverversion更改为" Sql server 2008 R2,2012或2014"。但这也不起作用。

6 个答案:

答案 0 :(得分:52)

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

我试图找到相同的答案。您可以认为只需按照您的方式设置解决方案的TargetServerVersion将使其使用正确的报告定义(或者可选择它们可以为您提供添加2016年之前报告项的选项)

在此之前,如果右键单击.rdl和“查看代码”,则可以更改以下行以使其在SQL 2014中运行 - 只需备份原始.rdl以防出错:< / p>

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行,保留子树结构体标记等。所以删除这些:

  <ReportSections>
    <ReportSection>

和这些......

    </ReportSection>
  </ReportSections>

3)删除整个ReportParametersLayout部分。所以(例如)删除它:

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

点击保存,返回设计并运行报告。如果您尚未修改设计,它将在SQL2014中工作。您更改任何字段的那一刻它将恢复为2016架构。

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

答案 1 :(得分:5)

您可以通过以下步骤从Visual Studio获取多种不同版本格式的报告:

  1. 在项目属性页面中将TargetServerVersion设置为所需的格式(在本例中为SQL Server 2008 R2, 2012 or 2014
  2. 构建项目
  3. 在构建输出文件夹中找到所需格式的rdl(在项目属性页中指定:Build => OutputPath

答案 2 :(得分:3)

我写了一个简单的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,运行它并上传新文件。

答案 3 :(得分:1)

尝试我在此链接上找到的这一步并为我工作: Error while uploading a report

  1. 2016年使用SSDT,将目标sql版本设置为SQL Server 2008 R2,2012或2014
  2. 清洁解决方案
  3. 重建解决方案
  4. 复制Bin \ debug文件夹的内容并用它替换主文件夹的内容(确保备份)
  5. SSRS 2010应该呈现您的项目

答案 4 :(得分:0)

将第二行包含 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 时。

答案 5 :(得分:0)

就我而言,当我在RDLC Design中添加参数时,系统在运行时引发异常,即报告定义具有无效的目标命名空间。 我刚刚解开了Microsot报告查看器v 12.0 并从当时的nugetpackages版本15安装了Microsoft.ReportingServices.ReportViewerControl.Winforms Atfer安装我的问题已解决。花了一整夜才弄清楚。 发生问题是因为我有VS 17,并且使用的是旧版的报表查看器。