Determinar a versão do .NET Framework para dll

Eu tenho uma dll antiga que foi compilada contra o framework .NET e implantada. Não tenho certeza qual versão do .NET framework foi compilada. Eu estou querendo saber como eu posso determinar qual versão do framework .NET esta dll foi compilada contra? Não posso confiar no código-fonte porque acredito que ele tenha sido atualizado para o Visual Studio 2008 e alterado para o .NET Framework versão 3.5.

Carregá-lo no Reflector e ver o que ele faz referência?

por exemplo:

insira a descrição da imagem aqui

No PowerShell, você pode usar o seguinte para obter o tempo de execução de destino:

$path = "C:\Some.dll" [Reflection.Assembly]::ReflectionOnlyLoadFrom($path).ImageRuntimeVersion 

Eu adaptei isso ao PowerShell da resposta de Ben Griswold .

Se você quiser saber a versão do framework de destino especificada no Visual Studio, use:

 $path = "C:\Some.dll" [Reflection.Assembly]::ReflectionOnlyLoadFrom($path).CustomAttributes | Where-Object {$_.AttributeType.Name -eq "TargetFrameworkAttribute" } | Select-Object -ExpandProperty ConstructorArguments | Select-Object -ExpandProperty value 

Você deveria ter algo como

.NETFramework, versão = v4.5.2

dotPeek é uma ótima ferramenta (gratuita) para mostrar esta informação.

Se você está tendo alguns problemas para se apossar do Reflector, então esta é uma boa alternativa.

insira a descrição da imagem aqui

Você pode usar o ILDASM …

 ildasm.exe C:\foo.dll /metadata[=MDHEADER] /text /noil 

e verifique a seção ‘Metadados’ na saída. Seria algo assim:

Seção de metadados: 0x424a5342, versão: 1.1, extra: 0, versão len: 12, versão: v4.0.30319

A tag ‘version’ informará a versão do .NET Framework. No exemplo acima, é 4.0.30319

Você tem algumas opções: Para obtê-lo programaticamente, a partir do código gerenciado, use Assembly.ImageRuntimeVersion:

 Dim a As Assembly = Reflection.Assembly.ReflectionOnlyLoadFrom("C:\path\assembly.dll") Dim s As String = a.ImageRuntimeVersion 

Na linha de comando, começando em v2.0, o ildasm.exe mostrará se você clicar duas vezes em “MANIFEST” e procurar por “Metadata version”. Determinando a versão CLR de uma imagem

Use o ILSpy http://ilspy.net/

open source, livre, definitivamente uma opção, já que agora o refletor é pago.

Ainda outra opção via Visual Studio, adicionar uma referência à DLL para qualquer projeto, em seguida, clicando com o botão direito na nova referência e clique em Propriedades, você pode ver o que você está procurando na versão Runtime:

insira a descrição da imagem aqui

Decompile-o com o ILDASM e observe a versão do mscorlib que está sendo referenciada (deve estar bem no topo).

Simplesmente

 var tar = (TargetFrameworkAttribute)Assembly .LoadFrom("yoursAssembly.dll") .GetCustomAttributes(typeof(TargetFrameworkAttribute)).First();