Publish-AXReport выдает ошибку "Имя не может начинаться с символа" "
Запуск приведенного ниже сценария PowerShell (т. Е. Для развертывания всех отчетов SSRS для AX) выдает ошибку:
$axdllname = "Microsoft.Dynamics.AX.Framework.Management.dll"
$gacfolder = join-path $env:windir "assembly\GAC_MSIL"
$axdll = Get-ChildItem $gacfolder -Recurse -Name $axdllname
$axdll = join-path $gacfolder $axdll
import-module $axdll
Publish-AXReport -ReportName "*" -RestartReportServer
Сообщение об ошибке:
Publish-AXReport : Name cannot begin with the ' ' character, hexadecimal value 0x20. Line 46, position 8.
At line:1 char:17
+ Publish-AXReport <<<< -ReportName "*" -RestartReportServer
+ CategoryInfo : ParserError: (:) [Publish-AXReport], XmlException
+ FullyQualifiedErrorId : Name cannot begin with the ' ' character, hexadecimal value 0x20. Line 46, position 8.,M
icrosoft.Dynamics.AX.Framework.Management.Reports.PublishReportCommand
К сожалению, я не могу найти копию источника для Publish-AXReport
так что не могу копнуть глубже, откуда это исключение.
Вопрос
Кто-нибудь знает вероятную причину этой проблемы, или какие шаги я мог бы предпринять, чтобы раскрыть причину?
Обновить
Вместо запуска для всех отчетов, используя *
Я попытался получить список всех отчетов (сам по себе работает нормально / не показывает отчетов с именами, начинающимися с пробела), а затем передал его в командлет publish-axreport; что теперь означает, что я вижу, какие отчеты приводят к этой ошибке.
Get-AxReport -ReportName * | Publish-AXReport
Теперь стало ясно, что существует несколько отчетов (хотя только небольшое подмножество доступных), которые выдают эту ошибку при публикации. Одним из них является AssetAcquisitionDocumentPL
,
Кажется, что ошибки возникают только для отчетов со связанными сборками / всегда ошибочными для тех, у кого; никогда для тех без
Такая же проблема возникает при запуске Get-AXReportServerConfiguration | %{Publish-AXAssembly -id $_.ConfigurationId -vsprojectname 'assetAcquisitionDocumentPL.BusinessLogic'}
Запуск выше с -verbose
Параметр switch показывает, что ошибка возникает в какой-то момент после копирования предположений из временного каталога в каталог bin SSRS.
2 ответа
Проблема решена в этой теме: https://community.dynamics.com/ax/f/33/t/190841
Первопричина
файл D:\Program Files\Microsoft SQL Server\MSRS11.AX2012_ENVIRON1\Reporting Services\ReportServer\rssrvpolicy.config
содержал пробел между открытой скобкой и одним из имен элементов; т.е. < CodeGroup ...>
вместо <CodeGroup ...>
,
Исправление этой опечатки решило проблему.
(Я не знаю, как место попало в файл в первую очередь / сомневаюсь, я узнаю, если мы не увидим эту проблему снова).
Шаги, чтобы обнаружить причину
Если у кого-то есть аналогичная проблема с другой причиной, вот подробный вариант того, как мы обнаружили проблему:
- Загрузите и извлеките монитор процесса: https://technet.microsoft.com/en-us/sysinternals/processmonitor.aspx
- Закройте все ненужные процессы / сервисы (чтобы уменьшить шум)
- открыто
Microsoft Dynamics AX 2012 Management Shell
как администратор - Введите команду, которая генерирует ошибку (
Publish-AXAssembly -id 'SSRSNLBAOS2' -vsprojectname 'assetAcquisitionDocumentPL.BusinessLogic' -verbose
); выберите команду, которая выполняет наименьшую возможную работу, прежде чем выдавать ошибку (чтобы уменьшить шум). - Монитор открытых процессов
- Запустите команду
- В момент появления ошибки нажмите "Сохранить в мониторе процесса", чтобы сохранить сеанс в файл PML.
- Закрыть монитор процесса и PowerShell
- Откройте файл PML и отфильтруйте по имени процесса
powershell.exe
- Ищите интересные события. Для меня я подозревал XML-файл, поэтому посмотрел на события доступа к файлу в конце файла.
- Так как раньше я сталкивался с похожими проблемами с файлами XML, сосредоточился на файлах XML (формат) / попытался проанализировать их, чтобы выяснить, какая ошибка (
[xml][string](get-content 'd:\some\path\to\a\file.config')
). - Когда файл не проанализировал / выдал ошибку о недопустимом пробеле, это был файл-виновник.
- Затем я открыл файл в текстовом редакторе и благодаря подсветке синтаксиса сразу обнаружил ошибку.
- Исправив файл, сохранив, а затем подтвердив, что это была единственная ошибка в файле, снова проанализировав, оставил файл в хорошем состоянии.
- Затем я снова
Publish-AXAssembly ...
Команда (без запуска монитора процесса), чтобы увидеть, была ли проблема решена - это было.
Спасибо @BrandonWiese из сообщества Dynamics за его помощь.
Похоже, в названии отчета есть пробелы (Hexidecimal 0x20), которые вызывают ошибку. Пожалуйста, проверьте ваш сценарий и / или имена отчетов, чтобы удалить пробелы.
Линия 46, позиция 8