У нас есть проект ASP.NET на C# (Visual Studio 2015). Как часть приложения, мы включили несколько стандартных отчетов Crystal Reports, разработанных в подключаемом модуле Crystal для VS 2015. На локальной машине разработчика мы можем без проблем запускать отчеты, используя приведенный ниже код.
using CrystalDecisions.CrystalReports.Engine;
...
ReportDocument report = new ReportDocument();
TableLogOnInfo conInfo = new TableLogOnInfo();
conInfo.ConnectionInfo.UserID = Global.Config.GetValue("USERID");
conInfo.ConnectionInfo.Password = Global.Config.GetValue("PASSWORD");
conInfo.ConnectionInfo.DatabaseName = Global.Config.GetValue("DATABASENAME");
conInfo.ConnectionInfo.ServerName = Global.Config.GetValue("DATASOURCE");
report.Load(reportPath + name);
for (int i = 0; i < report.Database.Tables.Count; i++)
{
report.Database.Tables[i].ApplyLogOnInfo(conInfo);
}
return new FileStreamResult(report.ExportToStream(ExportFormatType.PortableDocFormat), "application/pdf");
Но когда мы выполняем развертывание на сервере IIS на машине с Windows 2008 Server r2, мы получаем ошибку при создании экземпляра объекта ReportDocument:
at CrystalDecisions.Shared.SharedUtils..cctor() :
Could not load file or assembly 'log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304' or one of its dependencies. The system cannot find the file specified.
Все DLL-файлы CrystalDecisions. *. Включены в опубликованное приложение. Я выдергиваю волосы, пытаясь понять, в чем дело.
Чтобы было ясно, мы не используем Crystal Viewer. Мы просто пытаемся запустить отчет (* .rpt) и вывести его в поток файлов PDF.
Похоже, это не связано с Crystal Reports.
Вам необходимо развернуть библиотеку log4net. Возможно, ваше приложение использует его для регистрации журнала (например, возникновения исключений).
Я скопировал log4net.dll со своего локального компьютера, чтобы избежать первой ошибки. По-видимому, вам также нужно установить среду выполнения кристалла. Но среда выполнения не могла быть установлена на сервере Windows 2008 r2 SP1. Не удалось зарегистрировать некоторые библиотеки DLL.
Нам удалось получить и более старую версию (CRRuntime_32bit_13_0_19) для установки. Но у этого были проблемы с скомпилированным кодом.
Мне нужно было применить некоторые обновления Microsoft, чтобы наконец установить среду выполнения CRRuntime_32bit_13_0_23. Как только эта среда выполнения была установлена, все было в порядке.
Документация не очень понятна. Также не существует простого способа найти список предварительных условий для надлежащей среды выполнения. Я понятия не имею, какое обновление MS требовалось. Я их только что установил. До этого сервер был заблокирован для получения обновлений, потому что он был стабильным в течение нескольких лет.
Урок выучен.
Я скопировал его в каталог приложения (см. Мой ответ), но это не было основной проблемой. Настоящая проблема заключалась в отсутствии четкой документации о требованиях и предпосылках к среде выполнения.