Мой сценарий заключается в том, что я создаю DLL, в которой содержатся мои отчеты, и затем добавляю эту DLL в мой основной проект. Мой отчет настроен как встроенный ресурс, и в моем основном проекте я делаю следующее, чтобы установить отчет в ReportViewer.
Assembly assembly = Assembly.LoadFrom("MyAssembly.dll");
Stream stream = assembly.GetManifestResourceStream("MyAssembly.Reports.MyReport.rdlc");
MyReportViewer.LocalReport.LoadReportDefinition(stream);
MyReportViewer.RefreshReport();
Теперь, когда я это делаю, я знаю, что Отчет несколько загружается, потому что я могу установить параметры ReportParameters. Если бы он вообще не загружался, я бы выдал исключение, сообщающее, что параметр не существует или что-то в этом роде.
Что происходит, так это то, что мой Отчет будет загружать указанные параметры, и когда я RefreshReport (), я получаю это.
Источник определения отчета не указан.
Любой ключ к пониманию того, почему это происходит? Я чувствую, что могу что-то упустить, когда дело доходит до загрузки отчетов из DLL. Однако, когда я искал Интернет, казалось, что это было правильное решение.
В качестве примечания, у меня внутри .dll есть форма, по которой я звоню, и загружаю отчеты в совершенно нормальное состояние. Однако это другой случай, потому что эта форма точно знает, где находится этот отчет.
В этой ситуации у меня есть ReportViewer, который не находится внутри .dll, и я пытаюсь загрузить .rdlc, который находится внутри .dll, в мой ReportViewer, который не находится внутри dll.
EDIT
В довершение всего, если я использую следующий код, я могу увидеть файл, который мне нужен в DLL.
string[] resources = assembly.GetManifestResourceNames();
"MyApp.Controls.Reports.MyCustomReport.rdlc"