Инициализатор типа 'CrystalDecisions.CrystalReports.Двигатель.ReportDocument " выдал исключение

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

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

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

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

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

16 ответов


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

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

  1. Trace / Log исключение и его InnerException (рекурсивно): добавьте обработчик событий в AppDomain.UnhandledException событие и поместите туда свой код регистрации / трассировки. Использовать System.Diagnostics.Debug.WriteLine для трассировка, или регистратор (log4net, ETW). DbgView (инструмент Sysinternals) можно использовать для просмотра отладки.WriteLine trace.
  2. используйте производственный отладчик (например, WinDbg или NTSD) для диагностики исключения.
  3. используйте удаленную отладку Visual Studio для диагностики исключения (позволяет отлаживать код на целевом компьютере с собственного компьютера разработки).

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

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


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


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

To x86 > CRforVS_redist_install_32bit
To x64 > CRforVS_redist_install_64bit

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

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

устранение:

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

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

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

при установке этого модуля слияния будет добавлена необходимая dll в следующем каталоге C:\Program файлы (х86)\приложение businessobjects\отчетов Crystal для .Чистый фреймворк 4.0\общие\приложения businessobjects предприятия в XI 4.0\win32_x86\dotnet ограничителя

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

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

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


внутреннее исключение ошибки говорит не может загрузить такой как log4net файл или сборку', версия=1.2.10.0, культуры=нейтральный, значения PublicKeyToken=692fbea5521e1304'

изменение настройки AppPool False на включить 32-разрядное приложение решается вопрос


как сказал выше "М. А. Ханин", это может быть вызвано InnerException такой:

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

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


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

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

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

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


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


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

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


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

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


  1. загрузите CR redist 2005 или 2008(который является вашим инструментом) или скопируйте из C:\Program файлы\Microsoft Visual Studio 8 \ SDK\v2.0\Загрузчик\Пакеты\CrystalReports

  2. скачать c++ redist 2005 или 2008 (который является вашим инструментом)

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

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


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

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

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

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


Что сделал трюк для меня, чтобы изменить целевую машину с "любого процессора" на "x64" или, возможно, в вашем случае " x86 " в зависимости от архитектуры вашей целевой машины. Я бы сначала попробовал это, прежде чем переходить к более сложному решению, которое указывает на более сложную проблему.


Если вы используете visual studio , включите свойство сборки "Prefer 32-bit". см. изображение ниже.

enter image description here


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