0

我想在 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 键。

4

0 回答 0