报告定义具有无效的目标名称空间 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 获取多种不同版本格式的报告:
- 在项目 属性 页面中将
TargetServerVersion
设置为所需的格式(在本例中为 SQL Server 2008 R2, 2012 or 2014
)
- 构建项目
- 在构建输出文件夹中找到所需格式的 rdl(在项目 属性 页面中指定:
Build => OutputPath
)
试试我在 link 上找到的这个步骤,它对我有用:
- 在 2016 年使用 SSDT,将目标 sql 版本设置为 SQL Server 2008 R2、2012 或 2014
- 清洁解决方案
- 重建解决方案
- 复制您的 Bin\debug 文件夹的内容并用它替换主文件夹的内容(一定要有备份)
- 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 并且我使用的是旧版本的报告查看器。
我使用 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 获取多种不同版本格式的报告:
- 在项目 属性 页面中将
TargetServerVersion
设置为所需的格式(在本例中为SQL Server 2008 R2, 2012 or 2014
) - 构建项目
- 在构建输出文件夹中找到所需格式的 rdl(在项目 属性 页面中指定:
Build => OutputPath
)
试试我在 link 上找到的这个步骤,它对我有用:
- 在 2016 年使用 SSDT,将目标 sql 版本设置为 SQL Server 2008 R2、2012 或 2014
- 清洁解决方案
- 重建解决方案
- 复制您的 Bin\debug 文件夹的内容并用它替换主文件夹的内容(一定要有备份)
- 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 并且我使用的是旧版本的报告查看器。