2016-09-17 5 views
0

В приложении C# мы настроили Log4Net в попытке зарегистрировать неожиданные исключения. Ведение журнала работает, как ожидается, при запуске из Visual Studio, но приложение вылетает при установке с помощью Active Installer и запускается на клиенте.System.IO.FileNotFoundException с Log4Net при выпуске

конфигурации Log4Net:

<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> 
    <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
     <section name="MyApp.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" /> 
    </sectionGroup> 
    </configSections> 
    <log4net> 
    <root> 
     <level value="ALL" /> 
     <appender-ref ref="MyAppender" /> 
     <appender-ref ref="MyFileAppender" /> 
    </root> 
    <appender name="MyAppender" type="log4net.Appender.ConsoleAppender"> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date %level %logger - %message%newline" /> 
     </layout> 
    </appender> 
    <appender name="MyFileAppender" type="log4net.Appender.FileAppender"> 
     <file value="C:\Temp\MyApp\log.log" /> 
     <appendToFile value="true" /> 
     <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date %level %logger - %message%newline" /> 
     </layout> 
    </appender> 
    </log4net> 

Использование:

// in App : Application 
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 
// in Main() 
log4net.Config.XmlConfigurator.Configure(); 
log.Info("Log initialised"); 

Приложение прекращает работу с исключением

Application: MyApp.exe 
Framework Version: v4.0.30319 
Description: The process was terminated due to an unhandled exception. 
Exception Info: System.IO.FileNotFoundException 
    at System.ModuleHandle.ResolveType(System.Reflection.RuntimeModule, Int32, IntPtr*, Int32, IntPtr*, Int32, System.Runtime.CompilerServices.ObjectHandleOnStack) 
    at System.ModuleHandle.ResolveTypeHandleInternal(System.Reflection.RuntimeModule, Int32, System.RuntimeTypeHandle[], System.RuntimeTypeHandle[]) 
    at System.Reflection.RuntimeModule.ResolveType(Int32, System.Type[], System.Type[]) 
    at System.Reflection.CustomAttribute.FilterCustomAttributeRecord(System.Reflection.CustomAttributeRecord, System.Reflection.MetadataImport, System.Reflection.Assembly ByRef, System.Reflection.RuntimeModule, System.Reflection.MetadataToken, System.RuntimeType, Boolean, System.Object[], System.Collections.IList, System.RuntimeType ByRef, System.IRuntimeMethodInfo ByRef, Boolean ByRef, Boolean ByRef) 
    at System.Reflection.CustomAttribute.GetCustomAttributes(System.Reflection.RuntimeModule, Int32, Int32, System.RuntimeType, Boolean, System.Collections.IList, Boolean) 
    at System.Reflection.CustomAttribute.GetCustomAttributes(System.Reflection.RuntimeAssembly, System.RuntimeType) 
    at System.Reflection.RuntimeAssembly.GetCustomAttributes(System.Type, Boolean) 
    at System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type, Boolean) 
    at System.AppDomain.GetTargetFrameworkName() 

Мы также пытались использовать другие варианты для поля, но не повезло.

Любые идеи, как действовать?

+0

Что возвращает свойство 'System.Reflection.MethodBase.GetCurrentMethod(). DeclaringType'? Имеет ли ваше приложение право доступа для записи во временную папку? – VMAtm

ответ

1

Вы уверены, что скопировали dll log4net, когда вы установили приложение, просто проверьте, есть ли у вас одинаковые файлы на клиенте, которые у вас есть на вашей машине разработки.

+0

Спасибо, Питер, но, к сожалению, это не то, что вызывает крушение, упомянутое в вопросе –

+1

Вы уверены, что скопировали dll log4net, когда вы установили приложение, просто проверьте, есть ли у вас одинаковые файлы на клиенте, а у вас есть на вашей машине разработки. – Peter

+0

Ты был прав, Питер! Мне не хватало dll. Я рад принять ответ, если вы его создадите :-) –