J'essaie de déboguer ce que je crois être un problème de liaison WPF qui se produit uniquement sur une machine en production - Je ne peux pas repro sur une machine développeur . Pour ce faire, j'ai essayé d'obtenir les informations de trace de liaison à produire dans un fichier journal. Les réponses suivantes like this one, je suis en mesure d'obtenir à la sortie vers un emplacement codé en dur en configurant dans App.config:Impossible d'obtenir des informations de trace d'erreur de liaison WPF pour écrire dans le fichier journal configuré dans le code
<system.diagnostics>
<sources>
<source name="System.Windows.Data" switchName="SourceSwitch" >
<listeners>
<add name="textListener" />
</listeners>
</source>
</sources>
<switches>
<add name="SourceSwitch" value="All" />
</switches>
<sharedListeners>
<add name="textListener"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="c:\BindingErrors.log" />
</sharedListeners>
<trace autoflush="true" indentsize="4"/>
</system.diagnostics>
Cela fonctionne bien sur ma machine où j'ai des droits d'administrateur au c:\
lecteur . Le problème est que je veux écrire le journal quelque part où l'utilisateur a des droits, par ex. leur dossier TEMP. Donc, je veux faire quelque chose comme ça, en utilisant la variable d'environnement %TEMP%
:
initializeData="%TEMP%\BindingErrors.log"
Ce ne fonctionne pas, cependant, et je suppose que cela ne fonctionnera pas - see this answer; Donc, en suivant les conseils de cette réponse, j'ai essayé de configurer la sortie via le code au lieu de App.config. Voici ce que j'ai essayé jusqu'à présent:
var listener = new
TextWriterTraceListener(Environment.ExpandEnvironmentVariables(
@"%TEMP%\BindingErrors.log"), "myListener");
Trace.Listeners.Add(listener);
Trace.WriteLine("foo"); // just to see if it works at all.
Trace.Flush();
Mais ce n'écrit que foo
dans le fichier journal dans le dossier %TEMP%
. Il n'écrit pas les erreurs de liaison. J'ai essayé de reproduire ce que le App.config avait, mais il n'y a pas de collecte Sources
, alors quand j'instancier un TraceSource
, comme ceci:
var source = new TraceSource("mySource", SourceLevels.Information);
Je ne sais pas quoi faire avec elle, et il n'y a pas Listeners
collection à laquelle je peux ajouter mon instance listener
. MSDN ne semble pas tout rassembler pour moi, ou il me manque quelques détails critiques. Quelqu'un peut-il m'aider s'il vous plaît à comprendre ce que je fais mal?
Merci Peter! –