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