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

The report definition has an invalid target namespace rsInvalidReportDefinition

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

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

编辑:您设置为 TargetServerVersion 属性 的报告的特定版本会在 BIN(\debug 或您构建到的任何地方)文件夹中创建,只要您不使用任何2016 年特色。

我正在寻找相同的答案。您会认为简单地按照您的方式设置解决方案的 TargetServerVersion 会导致它使用正确的报告定义(或者他们可以选择让您选择添加 2016 年之前的报告项)

在那之前,如果您右键单击 .rdl 和 "view code",您可以更改以下行以使其在 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 行,保留 其下方的子树结构主体标记等)。所以删除这些:

  <ReportSections>
    <ReportSection>

还有这些……

    </ReportSection>
  </ReportSections>

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

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

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

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

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

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

试试我在 link 上找到的这个步骤,它对我有用:

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

将第二行报告代码中包含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

我写了一个简单的 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 设计中添加参数时,系统在 运行 时抛出异常,报告定义具有无效的目标命名空间。 我刚刚卸载了 Microsot 报告查看器 v 12.0 并从当时最新的 nugetpackages 版本 15 安装了 Microsoft.ReportingServices.ReportViewerControl.Winforms Atfer 安装我的问题得到解决花了整整一夜才弄明白。 发生问题是因为我有 VS 17 并且我使用的是旧版本的报告查看器。