如何在Visual Studio 2019中修复报表查看器错误?

7 浏览
0 Comments

如何在Visual Studio 2019中修复报表查看器错误?

错误:

本地报表处理期间发生了错误。

报表“Include\\Impresiones\\Rport.rdlc”的定义无效。

该报表的定义在此版本的报表服务中无效或不受支持。

报表定义可能使用较新版本的报表服务创建,或包含基于报表服务模式不良形成或不合法的内容。

细节:报表定义具有无效的目标命名空间\'http://schemas.microsoft.com/sqlserver/reporting/2016/01/reportdefinition\'不能升级。

当我使用 VS2012 编辑时,没有问题,但我现在更新到 VS2019,并编辑报表并想在报表查看器中显示它时,出现了上述错误,我该如何解决?

在我的 web.config 中,我有:

    
        
    
    
        
            
            
            
            
            
        
        
            
            
        
    
    
        
            
        
    


    
    
        
        
        
    

admin 更改状态以发布 2023年5月23日
0
0 Comments

升级Microsoft Reports支持Visual Studio 2019 / 2022

按照以下步骤升级使用Microsoft Report Viewer Runtimes 9-13的项目到Sql Server Reporting Services 14或15。

  1. 备份Visual Studio解决方案

  2. 检查Microsoft Report Designer是否已安装到Visual Studio 2019(最低版本15.3.1)或Visual Studio 2022(最低版本17.0.0)中

  3. 从项目中卸载或手动删除以下程序集引用(任何版本:9.0.0.0、10.0.0.0、11.0.0.0、13.0.0.0)

  • Microsoft.ReportViewer.WebForms

  • Microsoft.ReportViewer.Common

  1. 安装Microsoft.ReportingServices.ReportViewerControl.WebFormsMicrosoft.ReportingServices.ReportViewerControl.Winforms,其中包含更新的dll

ASP.NET-针对Target Runtime .NET 4.5.2(14.0.0.0)

Install-Package Microsoft.ReportingServices.ReportViewerControl.WebForms -Version 140.1000.523

ASP.NET-针对Target Runtime .NET 4.6及以上(15.0.0.0)

Install-Package Microsoft.ReportingServices.ReportViewerControl.WebForms -Version 150.1537.0

WinForms-针对Target Runtime .NET 4.5.2(14.0.0.0)

Install-Package Microsoft.ReportingServices.ReportViewerControl.Winforms -Version 140.1000.523

WinForms-针对Target Runtime .NET 4.6及以上(15.0.0.0)

Install-Package Microsoft.ReportingServices.ReportViewerControl.Winforms -Version 150.1537.0

这将向项目安装以下程序集...

  • Microsoft.ReportViewer.Common.dll
  • Microsoft.ReportViewer.DataVisualization.dll
  • Microsoft.ReportViewer.Design.dll
  • Microsoft.ReportViewer.ProcessingObjectModel.dll
  • Microsoft.ReportViewer.WebDesign.dll
  • Microsoft.ReportViewer.WebForms.dll
  • Microsoft.ReportViewer.WinForms.dll
  1. 在ASP.NET中-App_Code文件夹将有一个新的SqlServerTypes目录,其中包含Loader.cs以及包Microsoft.SqlServer.Types.14.0.314.76

这个文件夹也会出现在任何安装该软件包的库项目中。

        \SqlServerTypes\
        - Loader.cs or Loader.vb
        - readme.htm
        \SqlServerTypes\x64\
        - msvcr120.dll
        - SqlServerSpatial140.dll
        \SqlServerTypes\x86\
        - msvcr120.dll
        - SqlServerSpatial140.dll

  1. 如果App_Code目录已配置为VB.NET,则应该添加一个名为Loader.vb的新VB类,并可以从App_Code\SqlServerTypes中删除自动生成的Loader.cs

        Imports System
        Imports System.IO
        Imports System.Runtime.InteropServices
        Namespace SqlServerTypes
            Public Class Utilities
                
                Public Shared Function LoadLibrary(ByVal libname As String) As IntPtr
                End Function
                Public Shared Sub LoadNativeAssemblies(ByVal rootApplicationPath As String)
                    Dim nativeBinaryPath = If(IntPtr.Size > 4, Path.Combine(rootApplicationPath, "SqlServerTypes\x64\"), Path.Combine(rootApplicationPath, "SqlServerTypes\x86\"))
                    LoadNativeAssembly(nativeBinaryPath, "msvcr120.dll")
                    LoadNativeAssembly(nativeBinaryPath, "SqlServerSpatial140.dll")
                End Sub
                Private Shared Sub LoadNativeAssembly(ByVal nativeBinaryPath As String, ByVal assemblyName As String)
                    Dim path = System.IO.Path.Combine(nativeBinaryPath, assemblyName)
                    Dim ptr = LoadLibrary(path)
                    If ptr = IntPtr.Zero Then
                        Throw New Exception(String.Format("Error loading {0} (ErrorCode: {1})", assemblyName, Marshal.GetLastWin32Error()))
                    End If
                End Sub
            End Class
        End Namespace
    

  2. 配置

在ASP.NET中,将web config更新为Target .NET 4.5.2(Reporting Services 14.0.0.0)




  
    
      
        
        
        
        
        
        
        
        
      
      
        
        
      
    
    
    
      
      
    
  
  
    
    
    
      
      
    
  
  
    
    
      
      
    
    
  

或者更新Web config为Target .NET 4.6及以上(Reporting Services 15.0.0.0)




  
    
      
        
        
        
        
        
        
        
        
      
      
        
        
      
    
    
    
      
      
    
  
  
    
    
    
      
      
    
  
  
    
    
      
      
    
    
  

  1. 构建解决方案并确认整个项目编译成功。

  2. 如果是在旧版本的Visual Studio Report Designer中创建的,则升级报表以支持Visual Studio IDE。

在Visual Studio中双击报表,并在提示“是否要转换此报表”时进行转换。这将自动更新XML到当前支持的模式。

Microsoft Report Designer - Do You Want To Convert This Report?

升级报表后,必须单击保存以完成对报表文件的更改。原始文件会自动备份,新文件会取而代之。

然后,在XML编辑器中查看报表时,转换工具将进行以下模式定义更改。

对于没有报表参数的报表

从:VS2013

    

到:VS2019 / VS2022

        

默认的VS2019 / VS2022报表使用方式

        

对于具有报表参数的报表

从:VS2013

    

到:VS2019 / VS2022

    

如果报告具有ReportParameters元素,则转换工具会添加一个ReportParametersLayout块。例如:

      
        
          1
          1
          
            
              0
              0
              Test
            
          
        
      

如果在提示是否转换报告时单击取消,有一个选项可以手动编辑模式。

可以编辑XML模式并将支持的规范降级,以允许报表在当前的Visual Studio Report Designer中加载。

This version of the report definition language is not supported by this version of Visual Studio Report Designer

将报表从2016或2010降级到2008模式定义

如果报表是在当前Report Designer的新版本中创建的,则升级将失败。需要将报表降级,以便在Visual Studio 2019中打开文件。

请仅尝试以下XML标记更改,如果自动升级失败:

从:2016模式


从:包括默认字体族的2016模式


从:2010模式

    

到:2008模式

    

然后通过删除2008模式下未使用的元素降级SSRS报告

删除 ReportSections 标签,但不删除它的任何子元素


删除 ReportSection 标签,但不删除它的任何子元素


删除元素ReportParametersLayout和所有子元素(包括GridLayoutDefinition


如果报告包含默认字体属性“df”,则还要删除以下内容...

如果报告包含属性MustUnderstand="df",请删除该属性。

如果报告包含属性xmlns:df,请删除该属性。

如果报告包含元素df和所有子元素,请删除。

  1. 对于WinForms - 在输出目录中包含文件

如果该项目是WinForms,为了将报告包含在输出目录中,请右键单击报告文件,然后单击属性

将文件复制到输出目录属性更改为“仅当更改时复制”并保存项目。

  1. 最后: 构建和测试

保存所有更改后,构建解决方案以确认项目使用SQL Server Reporting Services运行时正确编译,然后使用自定义代码处理SSRS本地报告以进行测试。

设置SQL Server空间数据类型的原生程序集

ASP.NET应用程序对于ASP.NET应用程序,请在Global.asax.cs中的Application_Start方法中添加以下代码行:

SqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath("~/bin"));

桌面应用程序对于桌面应用程序,请在执行任何空间操作之前添加以下代码行:

SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory);

报告查看器控件版本

  • 8.0(2005)- 8.0.50727.42 - Visual Studio 2005

  • 9.0(2008)- 9.0.30729.1 - Visual Studio 2008

  • 10.0(2010)- 10.0.40219.1 - Visual Studio 2010

  • 11.0(2012)- 11.1.3452.0 - Visual Studio 2012/2013

  • 12.0(2014)适用于SQL Server 2014 - 12.0.2000.8 - SQL Server 2014

  • 12.0(2015报告查看器或使用SSDT)- 12.0.2402.15 - Visual Studio 2015(SSDT)

  • 13.0适用于SQL Server 2016(NuGet)- 13.0.1700.305 - SQL Server 2016

  • 13.0 for SQL Server 2016 - 13.0.x.x - SQL Server 2016 功能包

  • 14.0 (NuGet) - 14.0.1016.229 - Visual Studio 2017

  • 14.0 (2017 SSDT) - 14.0.x.x - Visual Studio 2017 (SSDT)

  • 15.0 (NuGet) - 15.0.1537.0 - Visual Studio 2017/2019/2022

  • 15.0 (2017/2019 Report Designer Extension) - 15.0.1322.137 - VS 2017/2019报告设计器

  • 15.0 (2022 Report Designer Extension) - 15.0.1509.0 - VS 2022报告设计器

0