Здравствуйте
Вопрос по загрузке отчётов из сборки
По определённым причинам я не хотел бы связываться с файлами
if(!File.Exists ...
и т.д.
Хотелось создать сборку
Положить её в некий кєш
и далее многократно делать StiReport.GetReportFromAssembly(asm)
я думал сделать так :
report.Compile();
asm = report.CompilerResults.CompiledAssembly;
однако, увидел, что CompiledAssembly == null
ну, вот, собственно, и вопрос :
как скомпилировать отчёт(не в файл!) и получить сборку и далее использовать только её
временно(?) сделал так
MemoryStream strm = new MemoryStream();
report.Compile(strm);
report.CompilerResults.CompiledAssembly
byte[] asmDump = strm.ToArray();
m_Assemblies.Add(
templateHashKey, Assembly.Load(asmDump));
Но мне кажется, ято так я загружаю 2 одинаковые сборки
1, "неявно", при report.Compile
2, "явно", вызывая Assembly.Load(asmDump)
Спасибо.
GetReportFromAssembly
GetReportFromAssembly
Это свойство очищается после компиляции. Сборку мможно достать так:Вопрос по загрузке отчётов из сборки
По определённым причинам я не хотел бы связываться с файлами
if(!File.Exists ...
и т.д.
Хотелось создать сборку
Положить её в некий кєш
и далее многократно делать StiReport.GetReportFromAssembly(asm)
я думал сделать так :
report.Compile();
asm = report.CompilerResults.CompiledAssembly;
однако, увидел, что CompiledAssembly == null
Код: Выделить всё
Assembly assembly = report.CompiledReport.getType().Assembly;
Этот код загружает сборку только один раз, но если вызвать его много раз то сборка будет загружена много раз. Единственной гарантией загрузки сборки один раз являетсяну, вот, собственно, и вопрос :
как скомпилировать отчёт(не в файл!) и получить сборку и далее использовать только её
временно(?) сделал так
MemoryStream strm = new MemoryStream();
report.Compile(strm);
report.CompilerResults.CompiledAssembly
byte[] asmDump = strm.ToArray();
m_Assemblies.Add(
templateHashKey, Assembly.Load(asmDump));
Но мне кажется, ято так я загружаю 2 одинаковые сборки
1, "неявно", при report.Compile
2, "явно", вызывая Assembly.Load(asmDump)
загрузка сборки из файла.
p.s. Может стоит включить отчеты в проект как исходный код?
Спасибо.
GetReportFromAssembly
Спасибо за ответ
а для потока кэширую созданные из сборок отчёты
сборка загружается один раз для одного процесса
а с файлами много проблем, когда их очень много и когда их нужно совместно использовать несколькими процессами
ещё раз, спасибо!
нет, естественно я кеширую сборки (...m_Assemblies.Add(templateHashKey, Assembly.Load(asmDump));) для процессано если вызвать его много раз
а для потока кэширую созданные из сборок отчёты
сборка загружается один раз для одного процесса
никак нельзя, другая архитектура, щаблоны лежат в БДp.s. Может стоит включить отчеты в проект как исходный код?
а с файлами много проблем, когда их очень много и когда их нужно совместно использовать несколькими процессами
это мне подходитAssembly assembly = report.CompiledReport.getType().Assembly;
ещё раз, спасибо!