Инициализатор типа '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) вам нужно либо:
- Trace / Log исключение и его InnerException (рекурсивно): добавьте обработчик событий в
AppDomain.UnhandledException
событие и поместите туда свой код регистрации / трассировки. ИспользоватьSystem.Diagnostics.Debug.WriteLine
для трассировка, или регистратор (log4net, ETW). DbgView (инструмент Sysinternals) можно использовать для просмотра отладки.WriteLine trace. - используйте производственный отладчик (например, WinDbg или NTSD) для диагностики исключения.
- используйте удаленную отладку 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
устранение:
i установите x86 для моего приложения, затем я установлю x64 для моего приложения установки
предварительное условие: я разместил поддерживающий 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
включить файл модуля слияния в проект установки. Вот версия не серьезная вещь, потому что я использую 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 в"
может быть, это зависит от того, что вы сделали в коде. моя ошибка в том, что я не могу открыть класс из-за этого элемента соединения.
загрузите CR redist 2005 или 2008(который является вашим инструментом) или скопируйте из C:\Program файлы\Microsoft Visual Studio 8 \ SDK\v2.0\Загрузчик\Пакеты\CrystalReports
скачать c++ redist 2005 или 2008 (который является вашим инструментом)
установите оба и перезагрузите систему
проблема решена.
Это из-за отсутствия возможности .... Если вы видите внутреннее исключение, вы увидите это сообщение
"Access is denied.
Access to speech functionality requires ID_CAP_SPEECH_RECOGNITION to be defined in the manifest."
Итак, чтобы избавиться от этого исключения. включите возможность распознавания речи из файла манифеста.
У меня была та же проблема, и она решила мою проблему. :)
Что сделал трюк для меня, чтобы изменить целевую машину с "любого процессора" на "x64" или, возможно, в вашем случае " x86 " в зависимости от архитектуры вашей целевой машины. Я бы сначала попробовал это, прежде чем переходить к более сложному решению, которое указывает на более сложную проблему.
Я столкнулся с той же проблемой. Целевой платформой был любой процессор в моем случае. Но был установлен флажок "Prefer-32Bit".. Снятие флажка же решило проблему.