調用AppDomain.DoCallback這是基於堆棧溢出的問題:How to load an assembly as reflection-only in a new AppDomain?從Powershell的
我試圖確定組件的運行時版本,但我穿越的嵌套的文件夾是組件可以加載多次。直接使用加載程序集
[Reflection.Assembly]::ReflectionOnlyLoadFrom($assembly)
因此無法工作,因爲程序集只能在應用程序域中加載一次。
給出的以下功能在一個單獨的應用程序域加載程序集:
function Load-AssemblyInNewAppDomain($assembly)
{
Write-Host $assembly.FullName
$domain = [AppDomain]::CreateDomain([Guid]::NewGuid())
$domain.DoCallback
({
$loaded = [Reflection.Assembly]::Load($assembly)
$runtime = $loaded.ImageRuntimeVersion
Write-Host $runtime
})
}
此委託的內容輸出到控制檯,而不是執行它:
OverloadDefinitions
-------------------
void DoCallBack(System.CrossAppDomainDelegate callBackDelegate)
void _AppDomain.DoCallBack(System.CrossAppDomainDelegate theDelegate)
$loaded = [Reflection.Assembly]::Load($assembly)
$runtime = $loaded.ImageRuntimeVersion
Write-Host $runtime
注意,結果是一樣的,無論我使用的PowerShell 4或5
任何幫助/指導讚賞
刪除DoCallback現在去除斷行左括號 –
之間斷行允許執行塊,但失敗:使用「1」參數調用「DoCallBack」的異常:「無法通過委託創建者程序集外的非託管函數指針,動態方法或方法序列化委託。」 –