我有2个服务具有log4net引用,并且XmlConfigurator设置为在AssemblyInfo.cs中观察。
如果我在本地计算机上运行这两个服务,则两个服务都从单独的目录运行,并且Copy Local设置为Log4Net dll。两种服务都可以正常登录。
当我将服务推送到生产环境时,他们都将放在同一个目录中(我在这里没有发言权),我看到的行为很奇怪。如果启动了一个服务,它会正常记录,但其他服务根本不会记录。更奇怪的是,如果我关闭它们并开始第二次,它会正常记录,但第一个不会记录。
我假设服务一次只能记录一个,但这似乎没有任何意义,因为它们是单独的服务。
有没有人知道这里会发生什么?
答案 0 :(得分:1)
看起来第一个进程是锁定DLL并阻止另一个进程将同一个文件加载到其app域中。只是为了好玩,你试过制作DLL的副本,更改名称,然后有第二个服务引用其他文件?也许是这样的事情:
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net2nd" />
答案 1 :(得分:1)
并非您希望动态更改.dll文件,但您可能需要考虑使用Shadow Copy服务加载log4net .dll。我从这个答案得到了这个想法:https://stackoverflow.com/a/226589/151234
可以找到一些有用的提示here。它与您在下载新的.dll文件时的工作方式类似。