Определение отчета SSRS новее чем Server

Я создал несколько отчетов в Visual Studio 2015 со всеми последними обновлениями. Однако, когда я пытаюсь развернуть отчеты, я получаю следующее сообщение:

Определение этого отчета недопустимо или не поддерживается данной версией служб Reporting Services.
11:40:28 Ошибка
Возможно, определение отчета было создано в более поздней версии служб Reporting Services или содержит контент, который не
11:40:28 Ошибка
правильно сформирован или недействителен на основе схем служб Reporting Services. Подробности: определение отчета имеет недопустимую цель
11:40:28 Ошибка
пространство имен " http://schemas.microsoft.com/sqlserver/reporting/2016/01/reportdefinition", которое не может быть обновлено.

Первые строки файла.rdl настроены так:

<?xml version="1.0" encoding="utf-8"?>
<Report MustUnderstand="df" 
xmlns="http://schemas.microsoft.com/sqlserver/reporting/2016/01/reportdefinition" 
xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner" 
xmlns:df="http://schemas.microsoft.com/sqlserver/reporting/2016/01/reportdefinition/defaultfontfamily">

Могу ли я изменить определение схемы? Если так, то к чему? Я пытался просто изменить 2016 на 2014 или 2012, но ни один не помог.

Есть ли место, куда я могу пойти, чтобы увидеть правильные определения?

10 ответов

Решение

На самом деле я столкнулся с подобной проблемой, когда изменение, которое мне нужно было сделать, привело к ошибке "Недокументированная ошибка / Недопустимая структура RDL" в 2016 году, поэтому я отредактировал файл RDL, чтобы открыть его в более ранней версии и внести свои изменения. Не слишком сложно, но вам нужно сделать пару правок тегов.

Для новых отчетов вы, вероятно, должны просто использовать более старую версию, но для существующих отчетов вы можете сделать это: (Я вернулся к 2008 году)

  • Изменить тег отчета:
  • Удалите весь блок "ReportParametersLayout".
  • Удалите тег "df" и его содержимое.
  • Удалите теги открытия и закрытия "ReportSections" и "ReportSection" (не содержимое).

На самом деле написал какой-то суперзадачный код, чтобы сделать это как часть поста в блоге, но ручное редактирование достаточно простое.

Параметры ниже должны быть установлены для вашей конкретной версии SSRS, а затем взять RDL из каталога \bin

Или, после обновления TargetServerVersion, просто используйте right click | deploy из рдл.

Принятый ответ значительно сложнее / подвержен ошибкам / маловероятен для работы с несколькими версиями ssrs, и его необходимо применять каждый раз при изменении rdl.

введите описание изображения здесь

У меня была такая же проблема при переходе на VS2017 и установил Report Designer Version 14.2.

Для меня только 3 шага, необходимых для решения проблемы.

1: Установить Изменить xmlns на " http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition"

2: Удалить ReportSections" а также "ReportSection"(Только теги).

3: Удалить отчет ReportParametersLayout раздел.

Единственное, что вам нужно запомнить, это указать xmlns на 2008/01

Другие 2 шага можно увидеть в сообщении об ошибке после перехода на 2008/01 и попытаться запустить отчет.

Я недавно столкнулся с этой проблемой также. Я обнаружил, что мне нужно всего лишь изменить два элемента в рассматриваемом файле.rdl.

  1. Меняться от:

    Отчет xmlns = "http://schemas.microsoft.com/sqlserver/reporting/2016/01/reportdefinition" xmlns: rd = "http://schemas.microsoft.com/SQLServer/reporting/reportdesigner"

    TO:

    Отчет 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"

В отличие от других ответов, мне нужен был 2010 год вместо 2008 года. Я бы проверил файл.rdl, который вы уже развернули.

  1. Удалите блок "ReportParametersLayout".

Примечание. Если я удалил блок ReportSections, он не работал, как отмечали другие.

Если у вас возникли проблемы с настольным приложением Visual Studo 2017 C# с LocalReport (RDLC), просмотрите этот ответ:

/questions/20385802/otchet-rdlc-perestaet-rabotat-posle-izmeneniya-visual-studio-2015-na-visual-studio-2017/20385817#20385817

Я столкнулся с той же проблемой, и вот как я ее решил,

  1. Установите свойство TargetServerVersion в свойствах проекта отчета, чтобы оно было вашей старой версией сервера отчетов.
  2. Постройте проект.
  3. Получите отчет в папке bin и разверните на старом сервере отчетов.

Ваш исходный формат отчетов и пространство имен будут обновлены до последней версии. Но отчеты папки bin будут создаваться для совместимости с целевой версией сервера отчетов.

Самое простое и понятное решение. Я предлагаю вам найти Microsoft.ReportingServices.ReportViewerControl.WebForms в разделе "Управление пакетами NuGet" текущего проекта и обновить эту версию dll до последней версии.

Перейдите из меню VS: Инструменты> Диспетчер пакетов NuGet> Управление пакетами NuGet для решения.

Я автоматизировал эту задачу.

создайте форму с текстовым полем с именем "TextBoxFile" и кнопкой. В коде нажатия кнопки:

    Dim xmlDoc As New XmlDocument()
    xmlDoc.Load(TextBoxFile.Text)
    Dim root = xmlDoc.DocumentElement 

    For Each elel As XmlNode In root.ChildNodes
        Debug.WriteLine(elel.Name & " " & elel.NodeType)
    Next

    If root.Attributes()("xmlns").Value <> "http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition" Then
        root.Attributes()("xmlns").Value = "http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition"
    End If

    Dim nsmgr = New XmlNamespaceManager(xmlDoc.NameTable)
    nsmgr.AddNamespace("bk", "http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition")

    Dim autoRefreshElements = root.GetElementsByTagName("AutoRefresh")
    While autoRefreshElements.Count > 0
        root.RemoveChild(autoRefreshElements(0))
    End While

    Dim ReportParametersLayout = root.GetElementsByTagName("ReportParametersLayout")
    While ReportParametersLayout.Count > 0
        root.RemoveChild(ReportParametersLayout(0))
    End While

    Dim ReportSections = root.GetElementsByTagName("ReportSections")

    If ReportSections.Count > 0 Then
        ' Move content of ReportSections just below the block.
        Dim ReportSection = ReportSections(0).ChildNodes()

        ' First, copy the elements after
        Dim precedent = ReportSections(0)
        For Each child As XmlNode In ReportSection(0).ChildNodes
            Dim clone = child.Clone
            root.InsertAfter(clone, precedent)
            precedent = clone
        Next

        ' After deleting the existing block
        While ReportSections.Count > 0
            root.RemoveChild(ReportSections(0))
        End While
    End If

    xmlDoc.Save(TextBoxFile.Text) 

    MsgBox("Ok")

У меня возникла та же проблема при переходе на VS2019 и установке дизайнера отчетов версии 14.2.

Мне потребовалось всего 3 шага, чтобы решить проблему.

1. Установите для параметра xmlns значение «http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition».

2: Удалить ReportSections» и «ReportSection» (только теги).

3. Удалить раздел отчета ReportParametersLayout.

Единственное, что вам нужно запомнить, это указать xmlns на 2008/01.

Остальные два шага можно увидеть в сообщении об ошибке после перехода на версию 2008/01 и попытки запустить отчет.

Делиться

Войдите в систему через учетную запись локального администратора и исправьте объекты компьютеров, удалив и создав эти объекты компьютеров.

Другие вопросы по тегам