Инициализатор типа для «CrystalDecisions.CrystalReports.Engine.ReportDocument» вызвал исключение

Я развертываю настольное приложение для своих клиентов, которое использует API Crystal Reports для отображения и печати форм. Я создаю свой установщик с помощью InstallShield 2012. Я также включил .NET 4.0 Framework вместе со всеми сборками Crystal. У меня есть 2 (своего рода связанные) проблемы:

1) Всякий раз, когда я пытался запустить приложение на клиентской машине, я получаю следующую ошибку:

The type initializer for 'CrystalDecisions.CrystalReports.Engine.ReportDocument' 
      threw an exception.

Я понятия не имею, что я забыл здесь. CrystalDecisions.CrystalReports.Engine dll правильно регистрируется в GAC, как и около 10 других сборок Crystal.

2) Я задавал этот вопрос на форумах SAP, и мне сказали, что мне нужно включите .NET 2.0 Framework вместе с .NET 4.0 Framework. Я попытался включить распространяемый пакет .NET 2.0 в свой пакет установщика, но установщик не устанавливает его. Установщик видит, что у меня установлена ​​версия 4.0, и пропускает установку версии 2.0?


person gwin003    schedule 20.05.2013    source источник


Ответы (18)


Когда статический конструктор выдает исключение, оно помещается в TypeInitializationException. Вам нужно проверить свойство InnerException объекта исключения, чтобы увидеть фактическое исключение.

В промежуточной/производственной среде (где у вас не установлена ​​Visual Studio) вам потребуется:

  1. Отслеживание/регистрация исключения и его InnerException (рекурсивно): добавьте обработчик события к событию AppDomain.UnhandledException и поместите туда код регистрации/отслеживания. Используйте System.Diagnostics.Debug.WriteLine для трассировки или логгер (log4net, ETW). DbgView (инструмент Sysinternals) можно использовать для просмотра трассировки Debug.WriteLine.
  2. Используйте производственный отладчик (например, WinDbg или NTSD) для диагностики исключения.
  3. Используйте удаленную отладку Visual Studio для диагностики исключения (что позволяет отлаживать код на целевом компьютере с вашего собственного компьютера разработки).
person M.A. Hanin    schedule 20.05.2013
comment
Спасибо, это поставило меня на правильный путь. Я реализовал свою собственную регистрацию исключений, но неправильно регистрировал InnerExceptions. - person gwin003; 21.05.2013
comment
Привет! человек, это из-за отсутствия возможности .... Если вы видите внутреннее исключение, вы увидите это сообщение Доступ запрещен. Для доступа к речевым функциям необходимо, чтобы ID_CAP_SPEECH_RECOGNITION был определен в манифесте. Итак, чтобы избавиться от этого исключения. включите возможность распознавания речи, как уже упоминалось. - person Zia Ur Rahman; 18.10.2016

Вот что у меня сработало:

Если вы устанавливаете на 64-разрядную машину, убедитесь, что в свойствах приложения на вкладке «Сборка» в качестве целевой платформы указано «Любой ЦП», и снимите флажок «Предпочитать 32-разрядную версию», если у вас есть такая возможность. Crystal очень обидчиво относится к 32/64-битным сборкам и делает некоторые довольно противоречивые предположения, которые очень трудно устранить.

person Jeremy Holovacs    schedule 10.06.2013
comment
Мое решение заключалось в том, что я не использовал правильную сборку log4net, которую хотела Crystal. Я использовал log4net в своем приложении для регистрации собственных исключений, но Crystal хотела версию log4net с другим PublicKeyToken. Как только я включил правильную версию в свой установщик, все заработало. - person gwin003; 10.06.2013
comment
Я видел документацию SAP, в которой явно указано, что нужно установить 32- или 64-битную НЕ AnyCpu. - person Paul Zahra; 28.09.2015

У меня было похожее сообщение, и после нескольких поисков в Интернете и выполнения всех предложений ничего не помогло. Наконец я нашел решение. На моем сервере IIS в разделе «Расширение пула приложений» есть параметр «Включить 32-разрядные приложения» — он был изменен с «ложь» на «истина», и после перезапуска сервера IIS моя программа начала генерировать файлы PDF.

person shahk26    schedule 23.07.2015

Проверьте свойства вашего проекта на целевой платформе. Установите соответствующую версию Crystal Reports:

To x86 > CRforVS_redist_install_32bit
To x64 > CRforVS_redist_install_64bit
person tyrodeveloper    schedule 05.06.2014
comment
Вы говорите, что приложение с таким названием должно быть установлено? С трудом разбираюсь в написанном. Если бы вы могли прояснить это, это было бы здорово. - person Lizz; 06.06.2014

Внутреннее исключение ошибки говорит: Не удалось загрузить файл или сборку 'log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304'

Изменение параметра AppPool False для Включить 32-разрядное приложение решило проблему.

person Kanad Mehta    schedule 25.04.2016

если вы используете визуальную студию, включите свойство сборки «Предпочитать 32-разрядную версию». см. изображение ниже.

введите описание изображения здесь

person Ravinda lakshan    schedule 24.04.2018
comment
Я знаю, что это старый пост, но для меня все было наоборот, среда выполнения была x64 на рабочем сервере, и у меня был установлен флажок Prefer 32-bit для целевой платформы в моем решении VS2015. Я должен был снять флажок, и это сработало! В любом случае спасибо за предложение, оно избавило меня от лишних дней или удаления волос :). - person GwenGuts; 28.04.2021

В течение одного полного дня я искал в Интернете и нашел решение самостоятельно. Тот же сценарий, приложение отлично работает на компьютере разработчика, но при развертывании выдает исключение «crystaldecisions.crystalreports.engine.reportdocument вызвало исключение». Подробности: sys.io.filenotfoundexcep crystaldecisions.reportappserver.commlayer версии 13.0.2000 отсутствует.

Моя IDE: MS VS 2010 Ultimate, CR V13.0.10

Решение:

  1. я установил x86 для своего приложения, затем я установил x64 для своего приложения установки

  2. Предварительное условие: я поместил поддерживающий файл среды выполнения CR CRRuntime_32bit_13_0_10.msi, CRRuntime_64bit_13_0_10.msi в следующий каталог C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages\Crystal Reports для .NET Framework 4.0

  3. Включите файл модуля слияния в проект установки. Вот версия не серьезная вещь, потому что я использую 13.0.10 soft, файл модуля слияния 13.0.16 Файл, который я включил: CRRuntime_13_0_16.msm Этот файл находится среди установленных файлов msm.

При установке этого модуля слияния необходимая библиотека DLL будет добавлена ​​в следующий каталог C:\Program Files (x86)\SAP BusinessObjects\Crystal Reports для .NET Framework 4.0\Common\SAP BusinessObjects Enterprise XI 4.0\win32_x86\dotnet

dll не вызовет никаких проблем.

На вашей машине разработчика вы подтверждаете это же.

Мне нужны очки репутации, если этот ответ полезен, пожалуйста, отметьте его полезным (+1)

person Pranesh Janarthanan    schedule 07.02.2016

Как сказал выше «М.А. Ханин», это может быть вызвано InnerException следующим образом:

"Unrecognized configuration section userSettings. (C:\Users\Pourakbar.h\AppData\Local\Accounting\Accounting.vshost.exe_Url_a4h1gnabohiu4wgiejk0d21rc2kbwr4g\1.0.0.0\user.config line 3)"

и я удалил папку: C:\Users\Pourakbar.h\AppData\Local\Accounting\Accounting.vshost.exe_Url_a4h1gnabohiu4wgiejk0d21rc2kbwr4g со своего компьютера, и это сработало для меня!

person Hossein POURAKBAR    schedule 22.10.2013
comment
Модульный тест распознан C:\Users\YourUserName\AppData\Local\Microsoft.TestHost.x86\TestSourceHost__Enumering_StrongName_m5l5weancdfp4s54niytdpqgfzeu55uc\15.5.1\user.config - person davidterra; 24.04.2018

Я не получал ошибку на 32-битных машинах, но был на 64-битных, поэтому я изменил целевую платформу с x86 на любой процессор, и это решило проблему.

person Rob King    schedule 28.08.2013

The type initializer for CrystalDecisions.CrystalReports.Engine.ReportDocument вызвал исключение.

Я изменил целевую платформу с x86 на Any CPU, и это решило проблему.

person Faheem    schedule 03.02.2015

У меня возникла проблема Тип Initializer.. мой конфигурационный файл разрешил ее..

я забыл добавить такой элемент подключения
"connectionStrings" "/connectionStrings" возможно, это зависит от того, что вы сделали в коде. моя ошибка в том, что я не могу открыть класс из-за этого элемента соединения.

person Antonio Cabilos    schedule 09.06.2015

  1. Загрузите cr redist 2005 или 2008 (это ваш инструмент) или скопируйте из C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\CrystalReports

  2. Загрузите С++ redist 2005 или 2008 (это ваш инструмент)

  3. Установите оба и перезагрузите систему.

  4. Проблема решена.

person user1970708    schedule 22.07.2016

Это из-за отсутствия возможности .... Если вы видите внутреннее исключение, вы увидите это сообщение

"Access is denied.
Access to speech functionality requires ID_CAP_SPEECH_RECOGNITION to be defined in the manifest."

Итак, чтобы избавиться от этого исключения. включите возможность распознавания речи из файла манифеста.

У меня была такая же проблема, и она решила мою проблему. :)

person Zia Ur Rahman    schedule 18.10.2016

Уловка для меня заключалась в том, чтобы изменить целевую машину с «ЛЮБОЙ ЦП» на «x64» или, возможно, в вашем случае «x86», в зависимости от архитектуры вашей целевой машины. Я бы попробовал это сначала, прежде чем переходить к более сложному решению, которое указывает на более сложную проблему.

person Alexander Zarate    schedule 29.01.2018

Недавно у меня была аналогичная ошибка с ошибкой log4net:

Не удалось загрузить файл или сборку «log4net, версия = 1.2.10.0, культура = нейтральная, PublicKeyToken = 692fbea5521e1304»

Это было на 64-битной машине, но я установил только среду выполнения 32bit.

Мне помогло убедиться, что сборка ориентирована только на x86.

person ScottC    schedule 09.03.2017

У меня была та же проблема, и я решил ее, установив как Crystal Report Runtime 32, так и 64-битную версию.

person Juan Carlos Roa    schedule 28.10.2020

Свойства проекта -> Компилировать -> Целевой ЦП -> Любой ЦП И снять флажок Предпочитать 32 бит

Сделанный

person Vinod John    schedule 30.11.2020

Я столкнулся с той же проблемой. В моем случае целевой платформой был любой процессор. Но флажок «Предпочитать 32-битный» был установлен. Снятие этого флажка решило проблему.

person Nitika Ish Goel    schedule 06.01.2016