2014-03-04 40 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再次下载到客户端的机器上。

希望这有助于。