我有一个场景,我需要New-Object一个类型,但是有多个类型具有相同的名称和名称空间。当类型存在于多个地方时,我找不到New-Object是如何决定创建该类型的。可以具体说明吗?理想情况下,我希望将dll名称传递给New-Object,但似乎没有这样的选项。
发布于 2017-12-28 17:10:18
指定完整的程序集-限定类型名称
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()发布于 2017-12-28 16:18:01
我想你可以试着用LoadFrom
[System.Reflection.Assembly]::LoadFrom(dllPath)那么PS在使用New-Object FullyQualifiedType时应该首先检查它。
编辑:
或者,似乎有一个选项可以使用Add-Type指定DLL程序集:
Add-Type -AssemblyName "yourAssembly" 然后,该类型将在当前PowerShell会话中可用。
https://stackoverflow.com/questions/48010715
复制相似问题