2014-03-04 108 views
2

與Windows智能客戶端應用程序,它運行良好我的(發展)的機器上,但是當我安裝了它在用戶的機器上,我得到這個錯誤:
Requires log4net version 1.2.10 be installed in GAC需要log4net的1.2.10版被安裝在GAC

在我的開發機器上,我有兩個GACed的log4net文件:一個x86,一個64位。用戶機器只有x86版本。所以我猜用戶需要64位,是嗎? 如果是這樣,我該如何安裝64位版本的log4net?

注意,這是一個不同的錯誤比這個: Error: Could not load log4net assembly

我發現另一個不同之處。如果我在開發/調試配置中發佈,它就可以工作。如果我在發佈配置中發佈,則會出現錯誤。

似乎沒有直接的log4net引用。它用於CrystalReports或NHibernate或兩者。

在調試配置中,應用程序以32位運行,在發佈配置中,應用程序以64位運行。如果我可以讓發佈配置以32位運行,我認爲這可以解決問題。任何人都可以說這是如何完成的?

+1

您可以在解決方案的屬性中設置發佈配置。 – Cerveser

+0

在解決方案屬性中我有:'Configuration:Release'和'Platform:Any CPU'。在這裏,我會指定32位,如果是這樣,怎麼樣? –

+1

對不起,它是在項目屬性=>編譯=>高級編譯選項 – Cerveser

回答

4

您可以在Visual Studio改變發行配置的x86 =>項目屬性=>編譯=>高級編譯選項

2

檢查log4net參考是否有Copy local = true。如果它是假的,則必須在GAC中安裝log4net,如果它爲true,它將包含在應用程序的bin目錄中。

如果您想將其安裝在gac中,您可以使用gacutil將log4net.dll安裝到gac中。檢查你的應用程序是否運行在64位(進程管理器),如果是的話,你需要安裝64位版本。

+1

看起來應用程序是64位。那麼是否有32位的「log4net.dll」和64位的另一個? –

+0

我認爲log4net.dll是使用開關「Any CPU」進行編譯的 - 這意味着在運行時抖動會產生32位或64位機器碼的決定因素。所以只需要一個dll。 – Stone

1

我遇到了類似的問題,我的ClickOnce應用程序。我試圖把log4net DLL放入GAC併發布,但沒有奏效。它也與32/64位版本無關。

的解決方案工作敵我我是

  1. 取出並從本地文件夾中所有必需項目添加log4net的引用。
  2. 檢查log4net引用屬性並確保所有引用的屬性「CopyLocal = True」。 (在我的情況下引用的項目之一,是指log4net的用「CopyLocal =假」,從而在GAC找DLL)
  3. (爲ClickOnce部署應用程序)刪除和添加引用的DLL(這是指log4net的)主要項目。這將強制所有的DLL再次下載到客戶端的機器上。

希望這有助於。

相關問題