Ошибка при использовании Crystal Reports для .net - PullRequest
6 голосов
/ 17 марта 2011

Я написал программу, которая генерирует 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;
    }
}

Разве я не включаю все правильные ссылки и не использую операторы?Я перепробовал много комбинаций, но безрезультатно.

Ответы [ 6 ]

2 голосов
/ 04 апреля 2011

Это также может быть связано с тем фактом, что сборки CR, поставляемые с Visual Studio, отличаются от полной версии продукта.

Если у вас возникли проблемы со временем выполнения, загружаемым из бизнес-объектов, попробуйтевремя выполнения здесь:

https://wiki.sdn.sap.com/wiki/pages/viewpage.action?pageId=56787567

0 голосов
/ 26 сентября 2012

Сервер настроен неправильно, я боюсь. Переустановите на нем среды выполнения из SAP (НЕ против VS), которые вы можете найти путем поиска в Google. Когда вы говорите, что хотите запустить его на сервере, запускаете ли вы его как веб-сайт или это тот случай, когда вы сбрасываете RPT в сетевой папке или как? Если это веб-сайт, то это почти без сомнения неправильно настроенная установка Crystal на сервере, а не ваш отчет как таковой.

Я не думаю, но не знаю наверняка, что при установке во время выполнения будет запрашиваться ключ продукта в любое время, поскольку вы просто используете бесплатную программу просмотра и т. Д. боюсь, ключ продукта, то вы не устанавливаете чистые среды выполнения.

0 голосов
/ 04 апреля 2011

Для регистрации управляемой сборки. Используйте это

C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322>RegAsm.exe /tlb dllName.dll
Microsoft (R) .NET Framework Assembly Registration Utility 1.1.4322.573
Copyright (C) Microsoft Corporation 1998-2002.  All rights reserved.


Here v1.1.4322 will the framework you are developing. Choose the framework 
accordingly. Or goto Start->AllPrograms -> MicrosoftVisual Studio 2005/8/10-> 
Visual Studio Tools-> Visual Studio Command Prompt. 
then run RegAsm.exe /tlb dllName.dll
0 голосов
/ 03 апреля 2011

Быстрый и подвох. Надеюсь, это может сработать.

AFAI может понять, возможно, отсутствуют ссылки на продукцию или несоответствие версий. Таким образом, чтобы преодолеть это, Из вашего решения, перейдите в каталог ссылок -> Выберите ссылку -> Щелкните правой кнопкой мыши ссылку -> Выбрать свойство -> затем выберите Копировать локально - Истина. Теперь создайте свое приложение, скопируйте новый каталог bin и страницы в рабочий и проверьте, работает он или нет. Если все еще не работает, то снова перейдите к свойству ссылки, выберите путь. Если это в GAC, то поиск в Google для копирования DLL из GAC. Или вы можете сопоставить вашу папку Windows с той же машиной и получить доступ, затем перемещаться по каталогу и копировать dll, но для этого вам нужны привилегии администратора. Теперь создайте новый dir внутри решения, назовите его CRDist, вставьте все dll в папку и оттуда, в конце производства, откройте командную строку и зарегистрируйте dll, используя regsvr32 -i dll path.

ТАКЖЕ В ВАШЕМ МЕХАНИЗМЕ ЭКСПОРТА PDF,

Я вижу, вы загружаете файл отчета, но не используете какой-либо источник данных. Вы устанавливаете источник данных во время разработки или что происходит за кулисами.

Надеюсь, это поможет

0 голосов
/ 30 марта 2011

Убедитесь, что конфигурации решений для отладки и выпуска в Visual Studio имеют одинаковые зависимости и параметры и что все пути зависимостей являются относительными;когда все работает в VS, но не снаружи, я обычно нахожу, что это одна из тех проблем с буксировкой.

0 голосов
/ 28 марта 2011

Это , похоже, связано.Вы пробовали описанные там шаги?

...