我正在尝试从 .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>