Ответ 1
Dispose protected на System.Xml.XmlWriter
. Вместо этого следует использовать Close
.
$writer.Close
Я пытаюсь уничтожить объект XmlWriter:
try
{
[System.Xml.XmlWriter] $writer = [System.Xml.XmlWriter]::Create('c:\some.xml')
}
finally
{
$writer.Dispose()
}
Ошибка:
Ошибка вызова метода, потому что [System.Xml.XmlWellFormedWriter] не содержит метода с именем 'Dispose'.
С другой стороны:
$writer -is [IDisposable]
# True
Что мне делать?
Dispose protected на System.Xml.XmlWriter
. Вместо этого следует использовать Close
.
$writer.Close
Вот альтернативный подход:
(get-interface $obj ([IDisposable])).Dispose()
Get-Interface script можно найти здесь http://www.nivot.org/2009/03/28/PowerShell20CTP3ModulesInPracticeClosures.aspx и был предложен в этом ответ.
С ключевым словом "using" мы получаем:
$MY_DIR = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent
# http://www.nivot.org/2009/03/28/PowerShell20CTP3ModulesInPracticeClosures.aspx
. ($MY_DIR + '\get-interface.ps1')
# A bit modified code from http://blogs.msdn.com/powershell/archive/2009/03/12/reserving-keywords.aspx
function using
{
param($obj, [scriptblock]$sb)
try {
& $sb
} finally {
if ($obj -is [IDisposable]) {
(get-interface $obj ([IDisposable])).Dispose()
}
}
}
# Demo
using($writer = [System.Xml.XmlWriter]::Create('c:\some.xml')) {
}