2010-06-14 17 views

Respuesta

68

Esta es un área donde brilla PowerShell. Si aún no lo tienes, instálalo. Está preinstalado con Windows 7.

La ejecución de esta línea de comandos:

[System.Reflection.Assembly]::LoadFrom("C:\full\path\to\YourDllName.dll").GetName().Version 

Muestra esto:

Major Minor Build Revision 
----- ----- ----- -------- 
3  0  8  0 

Tenga en cuenta que LoadFrom returnes un objeto de montaje, por lo que puede hacer casi cualquier cosa que te gusta. No es necesario escribir un programa.

+1

¿Hay alguna manera de hacer que esto funcione en ensambles de modo mixto? –

+2

Espero que funcione de manera similar. Mis pruebas fallaron, sin embargo, con un mensaje de error que dice que la versión en tiempo de ejecución del ensamblaje en modo mixto es más nueva que la que se cargó, no sé cómo eludir esto. – OregonGhost

+2

Para obtener solo el número de versión, agregue '.ToString()' al final, p. '[System.Reflection.Assembly] :: LoadFrom (" YourDllName.dll "). GetName(). Version.ToString()' –

8

Para aquellos que, como yo, que vienen en busca de una herramienta de este tipo:

using System; 
using System.IO; 
using System.Reflection; 

class Program 
{ 
    public static void Main(string[] args) 
    { 
     foreach (string arg in args) 
     { 
      try 
      { 
       string path = Path.GetFullPath(arg); 
       var assembly = Assembly.LoadFile(path); 
       Console.Out.WriteLine(assembly.GetName().FullName); 
      } 
      catch (Exception exception) 
      { 
       Console.Out.WriteLine(string.Format("{0}: {1}", arg, exception.Message)); 
      } 
     } 
    } 
} 
+0

Estas piezas cortas de código son las mejores (y las más fáciles de mantener) cuando se guardan como scripts. Recomiendo encarecidamente el proyecto de script cs para lograr esto. –

1

Wow esto es malo teniendo en cuenta cosas como la edad gdiplus.dll explotable de flotando alrededor.

Mi solución es simple. programación de archivos por lotes.

Esto pone un archivo NFO en el mismo directorio con la versión

, usted puede obtener Filever.exe, que se puede descargar como parte del paquete de herramientas de soporte de Windows XP SP2 - solamente 4,7 MB de descarga.

adobe_air_version.bat

c:\z\filever.exe /A /D /B "C:\Program Files\Common Files\Adobe AIR\Versions\1.0\Adobe AIR.dll" >000_adobe_air.dll_VERSION.nfo 

exit 

Variación.

Obtenga todas las versiones en un directorio de un archivo de texto.

c:\z\filever.exe /A /D /B "c:\somedirectory\ *.dll *.exe >000_file_versions.nfo 

exit 

También hay Sigcheck por systernals.

http://technet.microsoft.com/en-us/sysinternals/bb897441.aspx

0

herramienta Versión del archivo ayudará:

filever /V YourDllName.dll 
+0

¿Qué y dónde es esto? – Brannon

+0

Solía ​​estar en XP http://support.microsoft.com/kb/913111 –

+0

Está en [Windows XP Service Pack 2 Support Tools] (http://www.microsoft.com/en-us/download/ details.aspx? id = 18546). SIN EMBARGO, esto solo se puede instalar en un sistema XP. SO, para obtener el archivo para Win7/8, 'descomprimir' el exe de instalación con una herramienta como 7-Zip. Extraiga el archivo 'support.cab' dentro. Luego, una vez más, descomprime este CAB con 7-Zip y puedes obtener 'filever.exe'. – laifukang

15

Si utiliza mono y Linux, intente esto:

monodis --assembly MyAssembly.dll 

find . -name MyAssembly.dll -exec monodis --assembly {} ';' | grep Version 
-1

¿Utiliza GACUTIL?

Puede obtener la versión de ensamblaje desde este comando a continuación.

C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\gacutil.exe /L "<your assembly name>" 
+0

/l [] Enumera el contenido de la memoria caché de ensamblaje global. Cuando se especifica el parámetro opcional , solo se enumeran los ensamblados correspondientes. – JJS

+1

Eso no funciona para mí si tengo un ensamblado local, p. dentro de un paquete NUGET. Gacutil solo trabaja para asambleas en el GAC. – Matt

3

En Powershell

$version = [System.Diagnostics.FileVersionInfo]::GetVersionInfo("filepath.exe").FileVersion.ToString() 
0

que utiliza la respuesta seleccionada hasta que llegué el siguiente error Reference assemblies should not be loaded for execution. They can only be loaded in the Reflection-only loader context. durante varios montajes

utilizando

[System.Reflection.Assembly]::ReflectionOnlyLoadFrom("C:\full\path\to\YourDllName.dll").GetName().Version 

deben trabajar en esos casos (probablemente todos los casos)

Cuestiones relacionadas