Подтвердить что ты не робот

Инициализатор типа для "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.

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

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

4b9b3361

Ответ 1

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

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

  • Отслеживать/регистрировать исключение и его InnerException (рекурсивно): Добавить обработчик событий в событие AppDomain.UnhandledException и поместить там свой код ведения журнала/трассировки. Используйте System.Diagnostics.Debug.WriteLine для трассировки или регистратор (log4net, ETW). DbgView (инструмент Sysinternals) можно использовать для просмотра трассировки Debug.WriteLine.
  • Используйте производственный отладчик (например, WinDbg или NTSD) для диагностики исключения.
  • Используйте Visual Studio Remote Debugging для диагностики исключения (позволяющего отлаживать код на целевом компьютере с вашего собственного компьютера разработки).

Ответ 2

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

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

Ответ 3

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

To x86 > CRforVS_redist_install_32bit
To x64 > CRforVS_redist_install_64bit

Ответ 4

У меня было подобное сообщение, и после нескольких поисков в Интернете и выполнения всех предложений ничего не помогло. Наконец я нашел решение. На моем сервере IIS в опции опций пула приложений есть опция "Включить 32-разрядные приложения" - это было изменено с false на true и после перезапуска сервера IIS моя программа начала генерировать pdf файлы.

Ответ 5

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

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

Решение:

  • Я установил x86 для своего приложения, тогда я установил x64 для моего приложения настройки

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

  • Включить файл модуля слияния в проект установки. Вот версия несерьезная вещь, потому что я использую 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)

Ответ 6

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

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

Ответ 7

Что сработало для меня:

У меня была аналогичная ошибка с ошибкой log4net:

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

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

Убедившись, что сборка была нацелена только на x86, работала для меня.

Ответ 8

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

Ответ 9

Как сказано выше, "M.A. Hanin", это может быть вызвано 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 с моего компьютера, и это сработало для меня!

Ответ 10

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

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

Ответ 11

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

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

Ответ 12

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

  • Загрузите С++ redist 2005 или 2008 (который является вашим инструментом)

  • Установите оба и перезапустите свою систему

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

Ответ 13

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

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

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

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

Ответ 14

Я столкнулся с той же проблемой. В моем случае целевой платформой был любой CPU. Но был отмечен флажок "Prefer-32Bit". Снимите отметку с той же проблемы.