Types 如何让Powershell从刚加载的程序集添加类型
我使用添加类型加载了程序集:Types 如何让Powershell从刚加载的程序集添加类型,types,.net-assembly,powershell-5.0,Types,.net Assembly,Powershell 5.0,我使用添加类型加载了程序集: $Typename = '\\crtwfaadvlkv0.d2dbfg.com\PRODUCTION\Vision\Apps\VisionPipeline\Oracle.ManagedDataAccess.dll' Add-Type -LiteralPath $TypeName 并确认它已加载 > [appdomain]::CurrentDomain.GetAssemblies() | >> Sort-Object -Property Ful
$Typename = '\\crtwfaadvlkv0.d2dbfg.com\PRODUCTION\Vision\Apps\VisionPipeline\Oracle.ManagedDataAccess.dll'
Add-Type -LiteralPath $TypeName
并确认它已加载
> [appdomain]::CurrentDomain.GetAssemblies() |
>> Sort-Object -Property FullName |
>> Select-Object -Property FullName;
(partial results)
Oracle.ManagedDataAccess, Version=4.122.19.1, Culture=neutral, PublicKeyToken=89b483f429c47342
接下来,我想加载程序集中定义的类,以便可以使用它们,但这会导致以下错误:
> $oracletpe = Add-Type -AssemblyName 'Oracle.ManagedDataAccess' -PassThru
Add-Type : Cannot add type. The assembly 'Oracle.ManagedDataAccess' could not be found.
At line:1 char:14
+ ... oracletpe = Add-Type -AssemblyName 'Oracle.ManagedDataAccess' -PassTh ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Oracle.ManagedDataAccess:String) [Add-Type], Exception
+ FullyQualifiedErrorId : ASSEMBLY_NOT_FOUND,Microsoft.PowerShell.Commands.AddTypeCommand
Add-Type : Cannot add type. One or more required assemblies are missing.
At line:1 char:14
+ ... oracletpe = Add-Type -AssemblyName 'Oracle.ManagedDataAccess' -PassTh ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (:) [Add-Type], InvalidOperationException
+ FullyQualifiedErrorId : ASSEMBLY_LOAD_ERRORS,Microsoft.PowerShell.Commands.AddTypeCommand
因此,看起来PowerShell找不到刚刚加载的程序集。我做错了什么?如果不想添加两次,则不需要第二次加载 正如我在评论中提到的,只需将“-PassThru”参数添加到第一个“addtype”命令中 但如果要重新加载,请使用程序集限定名称:
Add-Type -AssemblyName 'Oracle.ManagedDataAccess, Version=4.122.19.1, Culture=neutral, PublicKeyToken=89b483f429c47342' -PassThru
通常,只允许全局程序集缓存(GAC)中的程序集和应用程序文件夹(递归)中的程序集使用部分名称。(但也有一些特殊的扩展,如SQL Server的“主机程序集存储”等)
但不要将“应用程序文件夹”与脚本所在的文件夹混淆。它是PowerShell应用程序文件夹:%WinDir%\System32\WindowsPowerShell\v1.0\
如果要测试它,只需将DLL放在该文件夹中并启动新的powershell控制台
有关程序集加载(特别是使用部分名称)的更多信息:为什么要加载两次程序集(首先按路径加载,其次按名称加载)?只需将“-PassThru”参数添加到第一个add Type命令中(使用LiteralPath),并将结果分配给一个变量。我不想加载两次。我想我不明白这是怎么运作的。我试图加载dll,然后在第二次调用中,将类型加载到名称空间中。Posh找不到程序集,因为它刚刚加载了程序集,这让我感到困惑。
Add-Type -AssemblyName 'Oracle.ManagedDataAccess, Version=4.122.19.1, Culture=neutral, PublicKeyToken=89b483f429c47342' -PassThru