10 Stimmen

Wie kann ich System.Xml.XmlWriter in PowerShell entsorgen?

Ich versuche, das XmlWriter-Objekt zu entsorgen:

try
{
    [System.Xml.XmlWriter] $writer = [System.Xml.XmlWriter]::Create('c:\some.xml')
}
finally
{
    $writer.Dispose()
}

Fehler:

Methodenaufruf fehlgeschlagen, weil [System.Xml.XmlWellFormedWriter] keine Methode namens 'Dispose' enthält.

Auf der anderen Seite:

 $writer -is [IDisposable]
 # True

Was sollte ich tun?

11voto

Michael Punkte 52790

Entsorgen ist geschützt en System.Xml.XmlWriter . Sie sollten verwenden Close stattdessen.

$writer.Close

8voto

alex2k8 Punkte 41000

Hier ist ein alternativer Ansatz:

(get-interface $obj ([IDisposable])).Dispose()

Das Get-Interface-Skript finden Sie hier http://www.nivot.org/2009/03/28/PowerShell20CTP3ModulesInPracticeClosures.aspx und wurde in diesem Artikel vorgeschlagen Antwort .

Mit dem Schlüsselwort "using" erhalten wir:

$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')) {

}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X