Я тестирую сборку в PowerShell. Особенностью сборки является то, что она записывает информацию о трассировке с использованием технологии System.Diagnostics.Trace
. Добавив ConsoleTraceListener
в коллекцию Listener
, мои приложения должны иметь возможность отображать все сообщения, отправленные в систему отслеживания.Почему PowerShell не показывает всю информацию о трассировке при использовании System.Diagnostic.Trace.Listeners?
Это работает в консольных приложениях и окне вывода Visual Studio. Это даже некоторые работы в PowerShell, за исключением того, что производительность намного меньше. Я подозреваю, что проблема связана с асинхронными операциями, но я действительно не знаю.
$dll = (Get-ChildItem -Recurse -Filter 'mylib.dll' | select -First 1).FullName
[Reflection.Assembly]::LoadFile($dll) | Out-Null
$listener = New-Object System.Diagnostics.ConsoleTraceListener
[System.Diagnostics.Trace]::Listeners.Clear()
[System.Diagnostics.Trace]::Listeners.Add($listener)
$service = 'servicename'
[Team.Library.Project.Name]::MethodAsync($service).Result
Консольная версия этой работы, как и следовало ожидать. Вся информация о трассировке отображается в консоли. Однако эта реализация (PowerShell) отображает только несколько строк, а затем возвращает мой объект.
Это то, что я получаю с консоли. Это имеет всю информацию, я хочу:
Это то, что я получаю от PowerShell. Она имеет меньше информации:
Добавление: Я нашел на самом деле, что при выполнении сценария в окне консоли или в окне консоли PowerShell выход ведет себя правильно. Только PowerShell ISE работает неправильно. Возможно, это не проблема PowerShell, а ошибка ISE.