Я пытаюсь отладить то, что, по моему мнению, является проблемой привязки WPF, которая происходит только на одной рабочей машине - я не могу воспроизвести на машине разработчика. Чтобы сделать это, я пытался получить информацию о трассировке привязки для вывода в файл журнала. Следуя ответам подобным этому, я смог заставить его выводиться в жестко закодированное местоположение, настроив его в App.config:
<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>
Это прекрасно работает на моей машине, где у меня есть права администратора на диск c:\
. Проблема в том, что я хочу записать журнал куда-нибудь, на что у пользователя есть права, например. их папку TEMP. Итак, я хочу сделать что-то подобное, используя переменную окружения %TEMP%
:
initializeData="%TEMP%\BindingErrors.log"
Однако это не работает, и я думаю, что это не сработает - см. этот ответ; поэтому, следуя совету в этом ответе, я попытался настроить вывод с помощью кода вместо App.config. Вот что я пробовал до сих пор:
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();
Но это только записывает foo
в файл журнала в папке %TEMP%
. Он не пишет ошибки привязки. Я пытался воспроизвести то, что было в App.config, но коллекции Sources
нет, поэтому, когда я создаю экземпляр TraceSource
, вот так:
var source = new TraceSource("mySource", SourceLevels.Information);
Я не знаю, что с ним делать, и нет коллекции Listeners
, в которую я могу добавить свой экземпляр listener
.
MSDN, кажется, не объединяет все это для меня, или я упускаю некоторые важные детали. Может кто-нибудь, пожалуйста, помогите мне понять, что я делаю неправильно?