Usando a reflexão no Powershell com diferentes versões do .NET Framework

1

Estou tentando refletir alguns atributos de assembly de um assembly .NET. Eu estou usando o Powershell 2.0, mas o assembly foi escrito usando o .NET Framework 4.5.1, portanto, quando eu tento o seguinte comando:

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

Eu recebo a seguinte exceção:

Could not load file or assembly 'file:///C:\Path\To\My\Assembly.dll' or one of its dependencies. This assembly is built by a runtime newer than the currently loaded runtime and cannot be loaded.

Eu tentei várias variações nesse tema (por exemplo, Assembly.Load, Assembly.LoadFrom), mas sem melhorias. Alguma ideia? Eu posso obter informações básicas usando Get-Command, mas isso não retorna todos os atributos de assembly que eu preciso.

    
por David Keaveny 11.02.2015 / 07:07

1 resposta

2

Você tem duas opções:

Instale uma versão mais recente do PowerShell (a versão 3.0 e 4.0 é suportada no Windows Server 2008 R2)

Força o PowerShell.exe a usar o .NET v4 em vez do .NET 2.0 (conforme descrito em essa resposta SO ), fornecendo um arquivo de configuração com o seguinte conteúdo:

<?xml version="1.0"?> 
<configuration> 
    <startup useLegacyV2RuntimeActivationPolicy="true"> 
        <supportedRuntime version="v4.0.30319"/> 
        <supportedRuntime version="v2.0.50727"/> 
    </startup> 
</configuration>
    
por 11.02.2015 / 12:31