Я создал класс-оболочку для инициализации моих объектов журналирования log4net, чтобы упростить создание настраиваемых свойств в ThreadContext. Это происходит в библиотеке классов, которую я создал вместе со многими другими полезными функциями. Чтобы присоединиться ко всем различным библиотекам, я также добавил цель AfterBuild в ILMerge с помощью переключателя '/internalize'.
Все ссылки на этот метод инициализации внутри библиотеки, на которые нацелен ILMerge, как представляется, работают очень хорошо. Однако, когда я ссылаюсь на эту объединенную библиотеку в других местах. Моя реализация вызывает ошибки уровня защиты. Я попытался добавить различные вещи в необязательный файл exclude (/internalize:excludes.txt), но это не работает.
Пример excludes.txt:
log4net.Config
log4net.ThreadContext
log4net.LogManager
У кого-нибудь еще была эта проблема?
[EDIT]:
Вот код:
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
namespace Logging
{
public static class Log4NetThreadContext
{
public static ILog Initialize(Type declaringType)
{
// Read from configuration
XmlConfigurator.Configure();
// Set Properties
ThreadContext.Properties["ID"] = ...
...
...
...
if(System.Diagnostics.Debugger.IsAttached)
{
// Special debugging logger
return LogManager.GetLogger("DEBUG_MODE");
}
else
{
// Root logger
return LogManager.GetLogger(declaringType);
}
}
}
}
Я использую этот код так.
private static readonly Type declaringType =
MethodBase.GetCurrentMethod().DeclaringType;
private static readonly ILog log =
Log4NetThreadContext.Initialize(declaringType);
...
log.Info("Something useful");
[EDIT]:
Это моя цель AfterBuild
<Target Name="AfterBuild">
<CreateItem Include="@(ReferenceCopyLocalPaths)" Condition="'%(Extension)'=='.dll'">
<Output ItemName="AssembliesToMerge" TaskParameter="Include" />
</CreateItem>
<Message Text="MERGING: @(AssembliesToMerge->'%(Filename)')" Importance="High" />
<Exec Command=""$(ProgramFiles)\Microsoft\Ilmerge\Ilmerge.exe" /targetplatform:v2 /log /internalize:"ilmerge.excludes.txt" /keyfile:$(AssemblyOriginatorKeyFile) /out:@(MainAssembly) "@(IntermediateAssembly)" @(AssembliesToMerge->'"%(FullPath)"', ' ')" />
<Delete Files="@(ReferenceCopyLocalPaths->'$(OutDir)%(DestinationSubDirectory)%(Filename)%(Extension)')" />
Есть ли лучший способ вообще отладить проблемы с уровнем защиты?
Log4NetThreadContext.Initialize(System.Type)' is inaccessible due to its protection level