Подтвердить что ты не робот

Отчет .RDLC, встроенный в DLL файл

У меня есть отчет, который используется службой Windows и приложением формы. Итак, я хочу поместить вложенный отчет в DLL файл, который может использоваться обоими.

Проблема заключается в том, что если я попытаюсь установить свойство ReportEmbeddedResource элемента управления ReportViewer в моем приложении формы Windows, он будет искать приложение формы Windows для ресурса, а не файл dll.

Например: Код из окна формы приложения:

rv.LocalReport.ReportEmbeddedResource = "MyReportInMyDLLFile.rdlc"

Как я могу заставить вышеуказанную команду искать встроенный ресурс в моем DLL файле?

4b9b3361

Ответ 1

Что-то вроде этого должно это сделать:

Assembly assembly = Assembly.LoadFrom("Reports.dll");
Stream stream = assembly.GetManifestResourceStream("Reports.MyReport.rdlc");
reportViewer.LocalReport.LoadReportDefinition(stream);

Ответ 2

Просто используйте полное пространство имен сборки, затем имена папок, а затем имя файла:

rv.LocalReport.ReportEmbeddedResource = 
    "My.Assembly.Namespace.Folder1.Folder2.MyReport.rdlc";

Затем убедитесь, что файл отчета установлен как встроенный ресурс, используя панель свойств.

Ответ 3

Вероятно, лучше всего было бы получить поток к ресурсу RDLC из другой сборки, а затем передать это методу "LoadReportDefinition" элемента управления Report Viewer.

Сведения о том, как получить поток из встроенного ресурса в другой сборке, можно найти здесь: Извлечение ресурсов с помощью класса ResourceManager

Кроме того, вам нужно будет обратиться к встроенному ресурсу, используя полный путь пространства имен.

например. если у вас есть приложение с пространством имен по умолчанию TheApp, и вы сохраняете отчет под названием " MyReport.rdlc" в папке с именем " Отчеты", запрос ссылки отчета будет: -

rv.LocalReport.ReportEmbeddedResource = "TheApp.Reports.MyReport.rdlc";