Кто-нибудь знает, почему log4net инициализирует регистраторы по-разному, когда WCF-процесс является консольным приложением и когда это служба Windows?
public class GenericType<T> : where T : class
{
public GenericType()
{
log = LogManager.GetLogger("Namespace.MyLogger");
}
}
в консольном приложении регистратор - «MyLogger», в службе Windows - «GenericType`1».
Кажется, что в службе Windows log4net применяет что-то вроде:
log = LogManager.GetLogger(GetType());
Процессы запускаются с использованием этого кода:
static class Program
{
static void Main(params string[] parameters)
{
var service = new Service();
if (parameters.Length > 0 && parameters[0].ToLower() == "/c")
{
service.RunConsole();//Calls service.OnStart()
}
else
{
ServiceBase.Run(service);
}
}
}
Поэтому, если мы запускаем его как консоль, мы передаем аргумент "/ c".Когда мы запускаем его как службу Win, он устанавливается как служба и выполняется без "/ c".Это единственное отличие, поэтому загрузка типов идентична.
Не универсальные регистраторы инициализируются просто отлично.
РЕДАКТИРОВАТЬ:
Упрощенный пример