在 Powershell 中使用不同 .NET 框架版本的反射

在 Powershell 中使用不同 .NET 框架版本的反射

我正在尝试从 .NET 程序集反映一些程序集属性。我正在使用 Powershell 2.0,但程序集是使用 .NET Framework 4.5.1 编写的,因此当我尝试以下命令时:

$assembly = [Reflection.Assembly]::ReflectionOnlyLoadFrom("C:\Path\To\My\Assembly.dll")

我收到以下异常:

无法加载文件或程序集“file:///C:\Path\To\My\Assembly.dll”或其依赖项之一。此程序集由比当前加载的运行时更新的运行时构建,因此无法加载。

我尝试了该主题的几种变体(例如 Assembly.Load、Assembly.LoadFrom),但没有任何改进。有什么想法吗?我可以使用 Get-Command 获取基本信息,但它不会返回我需要的所有程序集属性。

答案1

您有两个选择:

安装较新版本的 PowerShell(Windows Server 2008 R2 支持版本 3.0 和 4.0)

强制 PowerShell.exe 使用 .NET v4 而不是 .NET 2.0(如这个答案),通过提供一个包含以下内容的配置文件:

<?xml version="1.0"?> 
<configuration> 
    <startup useLegacyV2RuntimeActivationPolicy="true"> 
        <supportedRuntime version="v4.0.30319"/> 
        <supportedRuntime version="v2.0.50727"/> 
    </startup> 
</configuration>

相关内容