Инициализатор типа для "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?
Ответы
Ответ 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". Снимите отметку с той же проблемы.