Я написал программу, которая генерирует PDF-файлы из Crystal Report, а затем отправляет их по электронной почте кому-то.Программа отлично работает на моем компьютере разработчика, но когда я копирую каталог bin \ Release на Windows 2000 Server (компьютер, на котором я хотел бы его запустить), она запускается, а затем генерирует эту ошибку и трассировку стека:
The type initializer for 'CrystalDecisions.CrystalReports.Engine.ReportDocument' threw an exception.
at CrystalDecisions.CrystalReports.Engine.ReportDocument..ctor()
at DailyJobCostSummaryEmail.Program.crptToPDF(String reportFile, String jobNum, String outputLocation) in M:\Projects\DailyJobCostSummaryEmail\DailyJobCostSummaryEmail\Program.cs:line 79
at DailyJobCostSummaryEmail.Program.Main(String[] args) in M:\Projects\DailyJobCostSummaryEmail\DailyJobCostSummaryEmail\Program.cs:line 46
ОШИБКА ПРОИСХОДИТ ВСЕГДА, КРОМЕ ТОГО, ЧТОБЫ ВЫПОЛНЯТЬСЯ ИЗ VISUAL STUDIO.
.Net 2.0 установлен на этой машине, и с тех пор я установил CRRedist2005_x86.msi безрезультатно.Я даже получаю диалоговое окно «Отправить отчет об ошибке в Microsoft», хотя я использую try / catch для печати исключения в файл.Даже после выполнения блока catch моя программа не закроется должным образом.
static void Main(string[] args)
{
try
{
String dir = @"JobCostReports";
DataTable jobs = new DataTable();
using (SqlConnection conn = new SqlConnection(connString))
{
String sql = "JC_GetJobsClosedYesterday";
SqlDataAdapter da = new SqlDataAdapter(sql, conn);
da.Fill(jobs);
}
List<String> files = new List<String>();
foreach (DataRow row in jobs.Rows)
{
files.Add(crptToPDF(@"JobCost.rpt", row["JobNumber"].ToString().TrimEnd(), dir));
}
Utilities.sendEmail("[toEmail]",
"[FromEmail]",
"Job Cost Summaries for Yesterday",
"Attached are Job cost summaries for the " + files.Count + " jobs closed yesterday.",
files.ToArray());
Console.WriteLine("Email sent.");
}
catch (Exception e)
{
using (StreamWriter writer = new StreamWriter("errors.log", true))
{
writer.AutoFlush = true;
Console.WriteLine();
writer.WriteLine(e.Message);
writer.WriteLine(e.StackTrace);
}
Console.WriteLine(e.Message);
Console.WriteLine(e.StackTrace);
Console.Read();
}
finally { }
}
public static String crptToPDF(String reportFile, String jobNum, String outputLocation)
{
using (ReportDocument rpt = new ReportDocument())
{
rpt.Load(reportFile);
rpt.SetParameterValue("@vJobNumber", jobNum);
String output = outputLocation + @"\" + jobNum + "_JobCostSummary.pdf";
rpt.ExportToDisk(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat, output);
return output;
}
}
Разве я не включаю все правильные ссылки и не использую операторы?Я перепробовал много комбинаций, но безрезультатно.