我有一个场景,我需要New-Object
一个类型,但有多个类型具有相同的名称和命名空间。我无法找到New-Object
如何在多个位置存在时决定创建该类型的dll。可以指定吗?理想情况下,我想将dll名称传递给New-Object
,但似乎并不是一个选项。
答案 0 :(得分:3)
指定完整的assembly-qualified type name:
New-Object -TypeName 'MyType, AssemblyName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=abcdef0123456789'
这也适用于类型文字:
[MyType,AssemblyName,Version=1.0.0.0,Culture=neutral,PublicKeyToken=abcdef0123456789]::new()
您可以使用AssemblyName.GetAssemblyName()
# Load the assembly
$AssemblyPath = '.\MyAssembly.dll'
Add-Type -Path $AssemblyPath
# Fetch the assembly's name
$AssemblyName = [System.Reflection.AssemblyName]::GetAssemblyName((Resolve-Path $AssemblyPath).Path)
# Construct full type name
$TypeName = 'MyType'
$AssemblyQualifiedTypeName = $TypeName,$AssemblyName -join ', '
# Instantiate and object of this type
$MyObject = New-Object -TypeName $TypeName
#or
$MyObject = ($TypeName -as [Type])::new()
答案 1 :(得分:1)
我认为您可以尝试使用LoadFrom
:
[System.Reflection.Assembly]::LoadFrom(dllPath)
然后PS应该在使用New-Object FullyQualifiedType
时首先查看它。
编辑:
或者,似乎可以选择使用Add-Type
指定DLL程序集:
Add-Type -AssemblyName "yourAssembly"
然后,该类型将在当前的PowerShell会话中可用。