GetReportFromAssembly

Обсуждение Stimulsoft Reports.NET
Ответить
TVV
Сообщения: 27
Зарегистрирован: 08 сен 2006, 15:07

GetReportFromAssembly

Сообщение TVV »

Здравствуйте

Вопрос по загрузке отчётов из сборки

По определённым причинам я не хотел бы связываться с файлами

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)

Спасибо.

Vital
Сообщения: 647
Зарегистрирован: 09 июн 2006, 12:23

GetReportFromAssembly

Сообщение Vital »

Вопрос по загрузке отчётов из сборки

По определённым причинам я не хотел бы связываться с файлами

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. Может стоит включить отчеты в проект как исходный код?

Спасибо.
TVV
Сообщения: 27
Зарегистрирован: 08 сен 2006, 15:07

GetReportFromAssembly

Сообщение TVV »

Спасибо за ответ
но если вызвать его много раз
нет, естественно я кеширую сборки (...m_Assemblies.Add(templateHashKey, Assembly.Load(asmDump));) для процесса
а для потока кэширую созданные из сборок отчёты
сборка загружается один раз для одного процесса
p.s. Может стоит включить отчеты в проект как исходный код?
никак нельзя, другая архитектура, щаблоны лежат в БД :)
а с файлами много проблем, когда их очень много и когда их нужно совместно использовать несколькими процессами :)
Assembly assembly = report.CompiledReport.getType().Assembly;
это мне подходит
ещё раз, спасибо!
Ответить