在Powershell中使用不同的.NET框架版本进行reflection

我想从.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”或其某个依赖项。 此程序集由比当前加载的运行时更新的运行时构build,无法加载。

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

你有两个select:

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

强制PowerShell.exe使用.NET V4而不是.NET 2.0( 如此答复中所述 ),通过提供具有以下内容的configuration文件:

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