我想在 PowerShell-7 上使用[System.IO.MemoryMappedFiles]和在 Windows 10 20H2 上运行的 .NetFramework 4.8(版本 528372);
Name Value
---- -----
PSVersion 7.1.0
PSEdition Core
GitCommitId 7.1.0
OS Microsoft Windows 10.0.19042
Platform Win32NT
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
WSManStackVersion 3.0
并尝试将 DLL 加载到 PowerShell-7 控制台中。我的目标是使用[System.IO.MemoryMappedFiles]::CreateFromFile()创建大型二进制文件的视图。
以下基于Add-Type的“示例 3”和“示例 2”,并在 SO 中查看类似问题的答案,例如Unable to use System.IO.Compression.FileSystem.dll
xSet-Location $PSHOME
$AccType = Add-Type -AssemblyName "System.IO.MemoryMappedFiles" -PassThru
[System.IO.MemoryMappedFiles] | Get-Member
但是,在PowerShell 7 (x64) 控制台上,Get-Member
返回“无法找到类型”错误,如下所示。
InvalidOperation: C:\.......\PowerShell\MyTest-MemoryMappedFiles.ps1:3
Line |
3 | [System.IO.MemoryMappedFiles] | Get-Member
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| Unable to find type [System.IO.MemoryMappedFiles].
当我运行$AccType = Add-Type -AssemblyName "System.IO.MemoryMappedFiles" -PassThru
时,$AccType
包含以下内容,
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
False False EmbeddedAttribute System.Attribute
False False NullableAttribute System.Attribute
False False NullableContextAttribute System.Attribute
False False NullablePublicOnlyAttribute System.Attribute
False False Interop System.Object
False False Kernel32 System.Object
False False SECURITY_ATTRIBUTES System.ValueType
False False SYSTEM_INFO System.ValueType
False False MEMORY_BASIC_INFORMATION System.ValueType
False False MEMORYSTATUSEX System.ValueType
False True BOOL System.Enum
False False SR System.Object
False False SR System.Object
False False Win32Marshal System.Object
True True MemoryMappedFileOptions System.Enum
True True MemoryMappedFileAccess System.Enum
True False MemoryMappedFile System.Object
False False MemoryMappedView System.Object
True False MemoryMappedViewAccessor System.IO.UnmanagedMemoryAccessor
True False MemoryMappedViewStream System.IO.UnmanagedMemoryStream
True True MemoryMappedFileRights System.Enum
True False SafeMemoryMappedViewHandle System.Runtime.InteropServices.SafeBuffer
True False SafeMemoryMappedFileHandle Microsoft.Win32.SafeHandles.SafeHandleZeroOrMinusOneIsInvalid
运行Add-Type
命令后,当我进入
[系统.IO.内存
然后在 PS7 控制台输入 TAB 键,
[System.IO.MemoryMappedFiles
是自动完成的,但是当我进入时(请忽略下面的标题双引号。)
" [System.IO.MemoryMappedFiles]::
并输入 TAB 键,什么都没有完成。预加载的标准库,如
“[系统.IO.文件]::
完成方法
[System.IO.File]::AppendAllLine(
输入 TAB 键。