2013-05-20 14 views
19

Wdrażam aplikację komputerową do moich klientów, która używa interfejsu API Crystal Reports do wyświetlania i drukowania formularzy. Buduję swój instalator za pomocą InstallShield 2012. Zawarłem także .NET 4.0 Framework wraz ze wszystkimi złożeniami Crystal. Mam 2 (kinda pokrewne) dotyczy:Inicjator typów dla "CrystalDecisions.CrystalReports.Engine.ReportDocument" rzucił wyjątek

1) Ilekroć próbował uruchomić aplikację na komputerze klienckim, pojawia się następujący błąd:

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

nie mam pojęcia, co ja zapominam tutaj. Plik dll CrystalDecisions.CrystalReports.Engine jest poprawnie rejestrowany w GAC, podobnie jak około 10 innych złożeń Crystal.

2) I have asked this question on the SAP forums, i powiedziano mi, że muszę uwzględnić .NET 2.0 Framework wraz z .NET 4.0 Framework. Próbowałem redystrybuować .NET 2.0 w moim pakiecie instalatora, ale instalator go nie instalował. Czy instalator widzi, że mam zainstalowany 4.0, więc pomija instalację 2.0?

Odpowiedz

9

Kiedy konstruktor statyczny zgłasza wyjątek, jest zawijany wewnątrz TypeInitializationException. Aby sprawdzić faktyczny wyjątek, należy sprawdzić właściwość obiektu obiektu wyjątku: InnerException.

W środowisku postoju/produkcji (gdzie nie ma zainstalowanego Visual Studio), trzeba albo:

  1. nazwiska/Zaloguj wyjątek i jego InnerException (rekurencyjnie): Dodaj wydarzenie do zdarzenia AppDomain.UnhandledException i umieść tam swój kod rejestrowania/śledzenia. Użyj System.Diagnostics.Debug.WriteLine do śledzenia lub loggera (log4net, ETW). DbgView (narzędzie Sysinternals) może być używane do przeglądania śledzenia Debug.WriteLine.
  2. Skorzystaj z debuggera produkcyjnego (takiego jak WinDbg lub NTSD), aby zdiagnozować wyjątek.
  3. Użyj zdalnego debugowania programu Visual Studio, aby zdiagnozować wyjątek (umożliwiając debugowanie kodu na komputerze docelowym z własnego komputera programistycznego).
+0

Dzięki, to postawiło mnie na właściwej drodze. Zaimplementowałem własne rejestrowanie wyjątków, ale nie udało mi się poprawnie zarejestrować InnerExceptions. – gwin003

+0

Hej! Człowieku, dzieje się tak z powodu braku możliwości .... Jeśli zauważysz Wewnętrzny Wyjątek, zobaczysz komunikat "Odmowa dostępu." Dostęp do funkcji mowy wymaga ID_CAP_SPEECH_RECOGNITION do zdefiniowania w manifeście. " Aby pozbyć się tego wyjątku. włącz wspomnianą funkcję rozpoznawania mowy. –

13

Oto co pracował dla mnie:

Jeśli instalujesz na komputerze 64-bitowym, upewnij się, że właściwości aplikacyjne w zakładce budowy mają „Any CPU” jako docelowej platformy i odznacz pole wyboru "Preferuj 32-bitowe", jeśli masz opcję. Crystal jest bardzo wrażliwy na 32-64-bitowe złożenia i sprawia, że ​​pewne bardzo sprzeczne z intuicją założenia są bardzo trudne do rozwiązania.

+0

Moje rozwiązanie spowodowało, że nie używałem właściwego zestawu log4net, którego chciał Crystal. Używałem log4net w mojej aplikacji do rejestrowania własnych wyjątków, ale Crystal chciała wersji log4net, która miała inny klucz PublicKeyToken. Po dodaniu poprawnej wersji do mojego instalatora zadziałało. – gwin003

+1

Widziałem dokumentację SAP, która jawnie określa, aby ustawić ją na 32 lub 64-bitowy NOT AnyCpu. –

0

Nie otrzymałem błędu na komputerach 32-bitowych, ale był na 64-bitowym, więc zmieniłem platformę docelową z x86 na Dowolny procesor i problem został rozwiązany.

0

Jako „M.A. Hanin” wspomniano powyżej, może to spowodowane InnerException tak:

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

i Usunąłem folder: C:\Users\Pourakbar.h\AppData\Local\Accounting\Accounting.vshost.exe_Url_a4h1gnabohiu4wgiejk0d21rc2kbwr4g z mojego komputera i że pracował dla mnie!

5

Sprawdź właściwości swojego projektu dla celu platformy.Zainstalować odpowiednią wersję Crystal Reports:

To x86 > CRforVS_redist_install_32bit 
To x64 > CRforVS_redist_install_64bit 
+3

Czy chcesz napisać aplikację o tej nazwie?Trudno przeanalizować to, co napisałeś. Gdybyś mógł to wyjaśnić, byłoby wspaniale. – Lizz

0

The type initializer for CrystalDecisions.CrystalReports.Engine.ReportDocument zwrócił wyjątek.

Zmieniłem platformę docelową z x86 na Any CPU i problem został rozwiązany.

0

Mam problem Rodzaj Initializer .. mój plik konfiguracyjny rozwiązane ..

zapomniałem mieć element łączący jak tego
„connectionStrings” „/ connectionStrings” może to zależy od ciebie zrobił w kodzie. mój błąd jest nie mogę otworzyć klasy z powodu tego elementu połączenia.

5

Miałem podobną wiadomość i po kilku wyszukiwaniu w Internecie i wykonaniu wszystkich sugestii, nic nie pomogło. W końcu znalazłem rozwiązanie. Na moim serwerze IIS, w opcji wcześniejszej puli aplikacji, dostępna jest opcja "Włącz aplikacje 32-bitowe" - zmieniono ją z wartości false na true i po ponownym uruchomieniu serwera IIS, Mój program zaczął generować pliki PDF.

+0

Greats! Działa dobrze! –

-2

Zmierzyłem się z tym samym problemem. Platformą docelową był Any CPU w moim przypadku. Ale pole wyboru "Prefer-32Bit" zostało zaznaczone. Odznaczenie tego samego rozwiązało problem.

2

Przez jeden pełny dzień szukałem w Internecie i znalazłem rozwiązanie na własną rękę. W tym samym scenariuszu aplikacja działa poprawnie na komputerze programisty, ale po wdrożeniu wyrzuca wyjątek "crystaldecisions.crystalreports.engine.reportdocument zgłosił wyjątek" Szczegóły: sys.io.filenotfoundexcep crystaldecisions.reportappserver.commlayer version 13.0.2000 brakuje

Mój IDE: MS VS 2010 Ultimate CR V13.0.10

Rozwiązanie:

  1. mogę ustawić x86 dla mojego wniosku, to zestaw 64 dla mojej aplikacji konfiguracji

  2. Warunek: Umieściłem podtrzymującą plik CR wykonania CRRuntime_32bit_13_0_10.msi, CRRuntime_64bit_13_0_10.msi w następującym katalogu C: \ Program Files (x86) \ Microsoft SDK \ Windows \ v7.0A \ inicjującego \ Packages \ Crystal Reports dla .NET Framework 4.0

  3. Dołącz plik modułu scalania do projektu instalacji. Oto wersja nie jest poważna, ponieważ korzystam z 13.0.10 miękkiego, 13.0.16 pliku modułu scalającego Dołączony plik: CRRuntime_13_0_16.msm Plik ten znajduje się wśród ustawionych plików msm.

Podczas instalacji tego modułu Merge doda dll niezbędne w następującym reż C: \ Program Files (x86) \ \ SAP BusinessObjects Crystal Reports dla .NET Framework 4.0 \ Common \ SAP BusinessObjects Enterprise XI 4.0 \ win32_x86 \ dotnet

wersja pliku dll nie spowoduje żadnych problemów.

Na swoim komputerze programisty potwierdzasz to samo.

muszę punktów reputacji, jeśli ta odpowiedź jest przydatna uprzejmie zaznaczyć to użyteczne (+1)

2

Wewnętrzna wyjątkiem błędu mówi Nie można załadować pliku lub zestawu „log4net, Version = 1.2.10.0, Kultura = neutralny TokenKluczaPublicznego = 692fbea5521e1304'

Zmiana AppPool ustawienie fałszywy do Włączenie 32-bitowy Zastosowanie rozwiązać problem

0
  1. Pobierz cr REDIST 2005 lub 2008 (który jest narzędzie) lub skopiować z katalogu C: \ Program Files \ Microsoft Visual Studio 8 \ SDK \ v2.0 \ inicjującego \ Packages \ CrystalReports

  2. Pobierz C++ REDIST 2005 lub 2008 (co jest narzędzie)

  3. zainstalować i uruchomić zarówno system

  4. problem rozwiązany.

0

To ze względu na brak zdolności .... Jeśli pojawi się wyjątek wewnętrzny widać tę wiadomość

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

tak, aby pozbyć się tego wyjątku. włącz funkcję rozpoznawania mowy w pliku manifestu.

Miałem ten sam problem, który rozwiązał mój problem. :)

1

Co pracował dla mnie:

Miałem podobny błąd niedawno z błędem log4net:

Could not load file or assembly 'log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304'

To było na 65bit 64bit maszynie ale ja tylko zainstalowany 32bit czas pracy .

Udało mi się, że kompilacja była skierowana tylko na x86.

+2

Chcę też maszyny 65-bitowe !! Proszę, powiedz mi skąd mogę to zdobyć? : 3 – Nevermore

0

Co dla mnie okazało się zmienić maszynę docelową z "DOWOLNEGO CPU" na "x64", a może w twoim przypadku "x86" w zależności od architektury docelowego komputera. Próbowałbym tego najpierw, zanim przejdę do bardziej złożonego rozwiązania, które wskazuje na bardziej złożony problem.

Powiązane problemy