2013-05-20 200 views
19

我正在將桌面應用程序部署到使用Crystal Reports API顯示和打印表單的客戶端。我使用InstallShield 2012構建我的安裝程序。我還包括.NET 4.0 Framework以及所有的Crystal程序集。我有2個(有點兒有關)的擔憂:'CrystalDecisions.CrystalReports.Engine.ReportDocument'的類型初始值設定項引發異常

1)每當我試圖運行在客戶機上的應用程序,我得到以下錯誤:

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

我不知道我在這裏忘了。 CrystalDecisions.CrystalReports.Engine dll正在GAC中正確註冊,正如大約10個其他Crystal裝配一樣。

2)I have asked this question on the SAP forums,我被告知需要將.NET 2.0 Framework與.NET 4.0 Framework一起使用。我嘗試在我的安裝程序包中包含.NET 2.0可再發行組件,但安裝程序不安裝它。安裝程序是否看到我安裝了4.0,因此它跳過了2.0安裝?

回答

9

當一個靜態構造函數拋出一個異常時,它被封裝在一個TypeInitializationException中。您需要檢查異常對象的InnerException屬性以查看實際的異常。

在分期/生產環境(如你沒有安裝Visual Studio),你需要:

  1. 跟蹤/日誌記錄異常和它的的InnerException(遞歸):添加事件處理程序到AppDomain.UnhandledException事件,並將您的日誌/跟蹤代碼放在那裏。使用System.Diagnostics.Debug.WriteLine進行跟蹤,或使用記錄器(log4net,ETW)。 DbgView(Sysinternals工具)可用於查看Debug.WriteLine跟蹤。
  2. 使用生產調試器(如WinDbg或NTSD)來診斷異常。
  3. 使用Visual Studio的遠程調試來診斷異常(使您可以從自己的開發計算機調試目標計算機上的代碼)。
+0

謝謝,這讓我走上了正確的道路。我已經實現了我自己的異常日誌記錄,但我沒有正確記錄InnerExceptions。 – gwin003

+0

嘿!這是因爲缺乏能力....如果看到內部異常,您將看到此消息「訪問被拒絕。 訪問語音功能需要在清單中定義ID_CAP_SPEECH_RECOGNITION。」 所以擺脫這個例外。如上所述打開語音識別功能。 –

13

這裏是我工作:

如果您在64位計算機上進行安裝,確保生成選項卡下的應用程序性能有「任何CPU」作爲目標平臺,並取消勾選如果您有選項,則選中「首選32位」複選框。晶體是約32/64位程序集,並做出一些非常不直觀的假設,這是很難排除故障。

+0

我的解決方案涉及到我沒有使用Crystal所需的正確log4net程序集。我在我的應用程序中使用log4net來記錄自己的異常,但Crystal想要一個具有不同PublicKeyToken的log4net版本。一旦我在我的安裝程序中包含正確的版本,它就可以工作。 – gwin003

+1

我見過SAP文檔明確指定將其設置爲32位或64位NOT AnyCpu。 –

0

我沒有收到32位機器上的錯誤,但在64位,所以我改變了目標平臺從x86到任何CPU,它解決了這個問題。

0

爲「文學碩士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併爲我工作!

5

檢查您的projectm的平臺目標的屬性。安裝Crystal Reports相應版本:

To x86 > CRforVS_redist_install_32bit 
To x64 > CRforVS_redist_install_64bit 
+3

你是說應該安裝該名稱的應用程序?很難解析你寫的東西。如果你能清除它,那會很好。 – Lizz

0

The type initializer for CrystalDecisions.CrystalReports.Engine.ReportDocument 拋出異常

我將目標平臺從x86更改爲Any CPU並解決了問題。

0

我有一個問題的類型初始..我的配置文件來解決吧..

我忘了有這樣
「的ConnectionStrings」 「/的ConnectionStrings」 也許這取決於你的連接元件在代碼中做了。我的錯誤是我無法打開一個類,因爲這個連接元素。

5

我有類似的消息,並經過多次在線搜索和所有建議,沒有任何幫助。最後我找到了解決方案。在我的IIS服務器中,在應用程序池高級選項下,有一個「啓用32位應用程序」的選項 - 從false更改爲true,並且在重新啓動IIS服務器之後,我的程序開始生成pdf文件。

+0

好極了!它工作正常! –

-2

我面臨同樣的問題。目標平臺是我的情況下的任何CPU。但是複選框「Prefer-32Bit」已被選中。取消選中相同的選項可以解決問題。

2

我在網上搜索了一整天,我發現了一個解決方案。 相同的情況下,應用程序在開發人員機器正常工作,但部署時拋出異常 「crystaldecisions.crystalreports.engine.reportdocument拋出一個異常」 詳細信息:sys.io.filenotfoundexcep crystaldecisions.reportappserver.commlayer版本13.0.2000缺少

我的IDE:MS VS 2010旗艦版,CR V13.0.10

解決方案:

  1. 我設置的x86我的應用程序,然後我設置64我的設置應用

  2. 先決條件:我把配套CR運行時文件CRRuntime_32bit_13_0_10.msi,CRRuntime_64bit_13_0_10.msi在以下目錄 C:\ Program Files文件(x86)的\微軟的SDK \的Windows \ v7.0A \引導程序\軟件包\水晶報表.NET Framework 4.0

  3. 將合併模塊文件包含到安裝項目中。這裏是版本不是嚴重的事情,因爲我使用13.0.10軟件,13.0.16合併模塊文件 文件我包括:CRRuntime_13_0_16.msm 此文件是設置msm文件中找到一個。

雖然安裝該合併模塊將在下面的目錄 C增加必要的DLL:\程序文件(x86)\ SAP的BusinessObjects \水晶報表的.NET Framework 4.0 \ COMMON \ SAP BusinessObjects Enterprise的XI 4.0 \ win32_x86 \ dotnet

dll文件版本不會引起任何問題。

在您的開發人員機器中,您確認它一樣。

我需要的聲譽分,如果這個答案是非常有用的好心將其標記有用的(+1)

2

錯誤的內部異常說:無法加載文件或程序集「log4net的,版本= 1.2.10.0,文化=中性公鑰= 692fbea5521e1304'

更改應用程序池設置啓用32位應用程序解決問題

0
  1. 下載CR REDIST 2005或2008(這是您的工具),或從複製C:\ Program Files文件\微軟的Visual Studio 8 \ SDK \ 2.0 \引導程序\軟件包\水晶報表

  2. 下載C++ REDIST 2005或2008 (這是您的工具)

  3. 同時安裝並重新啓動系統

  4. 問題解決了。

0

這是因爲缺乏能力....如果你看到的內部異常,你會看到這條消息

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

因此,要擺脫這種異常。從Manifest文件打開語音識別功能。

我有同樣的問題,它解決了我的問題。 :)

1

什麼工作對我來說:

我最近有一個類似的錯誤與log4net的錯誤:

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

這是 65bit 64位計算機上,但我只安裝了32bit運行。

確保構建僅針對x86爲我工作。

+2

我也想要65位機!請告訴我從哪裏可以得到它? :3 – Nevermore

0

對我來說,訣竅是將目標機器從「任意CPU」更改爲「x64」,或者根據您的目標機器的體系結構,您的情況可能是「x86」。在進入一個更復雜的解決方案之前,我會先嚐試這個方法,這個方案表明一個更復雜的問題

相關問題