Определение отчета 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 году)
- Изменить тег отчета:
- Remove MustUnderstand = "df"
- Измените значение xmlns на " http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition"
- Удалите атрибут xmlns:df.
- Удалите весь блок "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.
Меняться от:
Отчет 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, который вы уже развернули.
- Удалите блок "ReportParametersLayout".
Примечание. Если я удалил блок ReportSections, он не работал, как отмечали другие.
Если у вас возникли проблемы с настольным приложением Visual Studo 2017 C# с LocalReport (RDLC), просмотрите этот ответ:
Я столкнулся с той же проблемой, и вот как я ее решил,
- Установите свойство TargetServerVersion в свойствах проекта отчета, чтобы оно было вашей старой версией сервера отчетов.
- Постройте проект.
- Получите отчет в папке 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 и попытки запустить отчет.
Делиться
Войдите в систему через учетную запись локального администратора и исправьте объекты компьютеров, удалив и создав эти объекты компьютеров.