Публикация файлов RDLC
У меня есть несколько файлов RDLC в моем приложении WPF. Когда я публикую проект, файлы отчетов не публикуются, и когда я пытаюсь получить к ним доступ с клиентом, я получаю сообщение о том, что они не найдены. Я проверил папку публикации, и действительно, их там нет. Я вызываю файлы RDLC со следующим кодом:
Microsoft.Reporting.WinForms.ReportViewer rvReportViewer;
/* ... */
rvReportViewer.LocalReport.ReportPath = string.Format("Reports/{0}.rdlc", ReportName);
Я пробовал установить действие Build на них в "Resource", что есть у меня для моих статических файлов изображений, но это, похоже, не имеет никакого значения.
Почему отчеты не копируются в каталог публикации? Есть ли способ заставить это произойти, или я должен обращаться к ним каким-то другим способом?
Спасибо!
Ответы
Ответ 1
Я не знаю, есть ли особые проблемы с файлами RDLC, но здесь общий подход к обеспечению публикации других файлов.
Щелкните правой кнопкой мыши файл в проводнике решений, выберите "Свойства". Установите для параметра "Построение действия" значение "Контент" и "Скопировать в каталог вывода в" Копировать, если новый ".
Перейдите к свойствам проекта- > Опубликовать страницу. Нажмите "Файлы файлов приложений", установите флажок "Показать все файлы". Установите для параметра "Статус публикации" значение "Включить (авто)"
Свойства файла
![File Properties]()
Файлы приложений
![Publish Properties]()
Ответ 2
Я использовал ответ @nos некоторое время, но я заметил, что в публикации набор .rdlc файлов копируется в два места:
- Исходное расположение проекта проекта web-приложения;
- Внутри папки bin.
Итак, если у меня есть \Reports\Report1.rdlc, я бы нашел в опубликованном месте:
1. <published folder>\Reports\Report1.rdlc;
2. <published folder>\bin\Reports\Report1.rdlc.
Я не хочу использовать копии rdlc во втором месте и, действительно, если я их удалю, отчеты все равно будут сгенерированы.
Я изменил настройки для каждого файла rdlc на:
Build Action: Content;
Copy to Output Directory: Do not copy.
И теперь ничто не записывается во второе место.
Ответ 3
Извините, ребята, это не имеет никакого отношения к "Copy Always" или "Copy if Newer". Фактически я установил его в "Никогда не копировать".
Эту проблему можно решить, изменив действие сборки с "Встроенный ресурс" на "Содержимое". Затем, когда вы создадите и опубликуете файлы RLDC, они будут скопированы в нужное место.
Ответ 4
вместо использования .ReportPath
- ** использовал следующий код:
reportViewer1.LocalReport.ReportEmbeddedResource="[Project
Name].[FolderName if Exist].[ReportName].rdlc";
- Затем перестройте проект развертывания.