5

Ho un app WPF utilizzando Enterprise Library.Logging 5, .NET Framework 4.0 Client ProfileErrore in "loggingConfiguration" di EnterpriseLibrary.Logging

Ho usato di registrazione dalla logica del database. Aggiungi anche il riferimento a 3 DLL da proiettare.

Microsoft.Practices.EnterpriseLibrary.Logging.dll 
Microsoft.Practices.EnterpriseLibrary.Logging.Database.dll 
Microsoft.Practices.EnterpriseLibrary.Data.dll 

ho 1 errore di runtime quando logEntry.Write(log) da questo messaggio:

Invalid TraceListenerData type in configuration 'listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Database.Configuration.FormattedDatabaseTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging.Database, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"' 

mio app.config è:

<loggingConfiguration name="" tracingEnabled="true" defaultCategory="General" logWarningsWhenNoCategoriesMatch="false"> 
    <listeners> 
    <add name="Event Log Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.FormattedEventLogTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
     listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.FormattedEventLogTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
     source="Enterprise Library Logging" formatter="Text Formatter" 
     log="" machineName="." traceOutputOptions="None" /> 
    <add name="Database Trace Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.Database.FormattedDatabaseTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging.Database, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
     listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Database.Configuration.FormattedDatabaseTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging.Database, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
     databaseInstanceName="Logging" writeLogStoredProcName="WriteLog" 
     addCategoryStoredProcName="AddCategory" formatter="Text Formatter" 
     traceOutputOptions="LogicalOperationStack, DateTime, Timestamp" /> 
    </listeners> 
    <formatters> 
    <add type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
     template="Timestamp: {timestamp}{newline}&#xA;Message: {message}{newline}&#xA;Category: {category}{newline}&#xA;Priority: {priority}{newline}&#xA;EventId: {eventid}{newline}&#xA;Severity: {severity}{newline}&#xA;Title:{title}{newline}&#xA;Machine: {localMachine}{newline}&#xA;App Domain: {localAppDomain}{newline}&#xA;ProcessId: {localProcessId}{newline}&#xA;Process Name: {localProcessName}{newline}&#xA;Thread Name: {threadName}{newline}&#xA;Win32 ThreadId:{win32ThreadId}{newline}&#xA;Extended Properties: {dictionary({key} - {value}{newline})}" 
     name="Text Formatter" /> 
    </formatters> 
    <logFilters> 
    <add type="Microsoft.Practices.EnterpriseLibrary.Logging.Filters.CategoryFilter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
     name="Category Filter" /> 
    </logFilters> 
    <categorySources> 
    <add switchValue="All" name="Repository" /> 
    <add switchValue="All" autoFlush="false" name="General" /> 
    <add switchValue="All" name="TraceDB"> 
     <listeners> 
     <add name="Database Trace Listener" /> 
     </listeners> 
    </add> 
    </categorySources> 
    <specialSources> 
    <allEvents switchValue="All" name="All Events" /> 
    <notProcessed switchValue="All" name="Unprocessed Category" /> 
    <errors switchValue="All" name="Logging Errors &amp; Warnings"> 
     <listeners> 
     <add name="Event Log Listener" /> 
     </listeners> 
    </errors> 
    </specialSources> 
</loggingConfiguration> 

Qual è il mio problema?

+0

Se si rimuove il primo listener, si otterrà la stessa eccezione per il secondo listener? – abatishchev

+0

Vedere [questo post del blog] (http://techiethings.blogspot.com/2009/04/enterprise-library-error-invalid.html) – abatishchev

+0

Grazie per la modifica. Il primo ascoltatore è corretto durante l'esecuzione del programma. Ma aggiungendo il secondo listener, entrambi i listener non vengono eseguiti. La mia configurazione è simile progetto di registrazione di esempio in MSDN, ma è corretto e questo non è corretto. La più grande differenza tra la mia app e il campione è la versione di Framwork. La mia app Framwork è 4 client ed è 3.5. – Ehsan

risposta

3

Il problema è che si sta utilizzando il blocco dati (tramite il listener di traccia del database). Ciò dipende dal provider di dati .NET Framework per Oracle che è un Feature Not Included in the .NET Framework Client Profile.

Per risolvere questo problema, è necessario utilizzare .NET Framework 4 anziché il profilo client.

+0

Il mio problema è stato risolto cambiando la versione Framwork da 4 client a 4, ma è comunque eccetto cambia versione Framework? – Ehsan

2

La modifica del framework di destinazione in .NET 4 invece del profilo del cliente ha risolto il problema. Tutti gli altri forum dicono di aggiungere un riferimento a Logging.Database che è ancora probabilmente richiesto ma nessuno menziona il framework di destinazione. Grazie.

1

La risposta di cui sopra non ha risolto il mio problema. Per me, ho creato un progetto di lib di classe solo per la registrazione di Enterprise Library. Ho aggiunto tutti i riferimenti appropriati per il progetto della libreria di classi da compilare, ma ho ricevuto l'errore in fase di esecuzione durante il tentativo di scrivere nel database dei log. Per risolvere il problema, ho dovuto aggiungere i riferimenti DLL Ent Lib al progetto di applicazione "chiamante" in Vis Studio, poiché a runtime apparentemente non aveva idea di cosa fosse la configurazione di registrazione.

+0

Sto affrontando lo stesso problema. Ma non voglio aggiungere riferimenti nel chiamare le applicazioni. come sono oltre 15 diversi progetti. :( –

+0

Una potenziale soluzione è creare un tipo di servizio di registrazione WCF \ Web e chiamare semplicemente questo? – ewitkows

2

Per me è stato un errore semplice - È scomparso quando ho aggiunto il Microsoft.Practices.EnterpriseLibrary.Logging.Database.dll al mio progetto.

+1

Ha funzionato anche per me. (Non sono sicuro del motivo per cui questa dll non viene automaticamente inclusa con nuget) – Yogurtu