Сбой PowerShell при вызове .NET-события с параметром ref
, на который я подписался.
Я уменьшил проблему до следующего кода.
.NET:
namespace PSEventTest
{
public delegate void BadHandler(ref string str);
public class PSEventTest
{
public event BadHandler BadEvent;
public void InvokeBad()
{
var handler = BadEvent;
if (handler != null)
{
var str = "bad";
handler(ref str);
}
}
}
}
PowerShell:
Add-Type -path $PSScriptRoot"\PSEventTest.dll"
$obj = New-Object PSEventTest.PSEventTest
$bad = Register-ObjectEvent -InputObject $obj -EventName BadEvent -Action {
Write-Host "bad!" # it also crashes if this script-block is empty
}
$obj.InvokeBad(); # crash
Когда я запускаю PowerShell script, я получаю следующее:
Если я нажимаю Debug
, я получаю это из Visual Studio:
copy exception detail to the clipboard
дает мне это
System.NullReferenceException was unhandled
Message: An unhandled exception of type 'System.NullReferenceException' occurred in Unknown Module.
Additional information: Object reference not set to an instance of an object.
Мне кажется, я должен каким-то образом предоставить строку в -Action
script -block, но я не знаю, как это сделать.
P.S. Я использую PowerShell 4:
PS C:\Windows\system32> $PSVersionTable.PSVersion
Major Minor Build Revision
----- ----- ----- --------
4 0 -1 -1