我可以指定一个在Powershell中使用New-Object的dll吗?

时间:2017-12-28 16:09:42

标签: c# .net powershell

我有一个场景,我需要New-Object一个类型,但有多个类型具有相同的名称和命名空间。我无法找到New-Object如何在多个位置存在时决定创建该类型的dll。可以指定吗?理想情况下,我想将dll名称传递给New-Object,但似乎并不是一个选项。

2 个答案:

答案 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程序集:

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/add-type?view=powershell-5.1

Add-Type -AssemblyName "yourAssembly" 

然后,该类型将在当前的PowerShell会话中可用。