2009-10-08 15 views
25

Teniendo en cuenta lo siguiente:número de versión de un archivo DLL en .NET

string file = @"c:\somepath\somefile.dll"; 

¿Cómo puedo encontrar los números de archivo y versión del producto de esa DLL utilizando .NET?

La dll puede ser nativa o administrada.

Gracias.

Respuesta

38

Sí , usando System.Diagnostics.FileVersionInfo.

string fileVersion = FileVersionInfo.GetVersionInfo(file).FileVersion; 
string productVersion = FileVersionInfo.GetVersionInfo(file).ProductVersion; 

Tenga en cuenta que la versión del archivo de un ensamblaje podría ser diferente de su versión de ensamblaje. La versión de ensamblaje es parte de la identidad de la asamblea.

+0

Gracias Lars, de alguna manera pasé por alto la clase FileVersionInfo. – rein

+0

Tengo un problema con esta clase FileVersionInfo. No puedo encontrarlo. Intenté usar el espacio de nombres System :: Diagnostics, pero no está en el diagnóstico. Intenté clr project, proyecto C++ vacío, vinculé version.lib, system.dll y todavía no puedo encontrarlo. Por favor ayuda. – shake

+0

Solo tenga en cuenta que FileVersionInfo.FileVersion es una representación de cadena que puede no estar actualizada. Debería mirar FileVersionInfo.FileMajorPart, FileMinorPart, FileBuildPart, FilePrivatePart. Consulte [GetFileVersionInfo() devuelve información de la versión del archivo incorrecto] (http://stackoverflow.com/questions/5263954/getfileversioninfo-returns-wrong-files-version-information) – bdeem

4

No sé acerca DLL nativos pero con dlls administrados funciona así:

System.Reflection.Assembly.LoadFile(file).GetName().Version 

EDIT: Creo que se puede leer la información de la versión en C con GetFileVersionInfo() ...

+1

Tenga en cuenta: Devolver la versión de ensamblaje, no la versión de archivo. Ambos pueden diferir. –

+1

Tampoco es lo mismo que la función win32 GetFileVersionInfo, que devuelve la versión del archivo y no la versión del ensamblado. –

+0

Tienes razón, por supuesto. – EricSchaefer

0

Si desea que la información de versión del archivo a continuación, utilizar la clase FileVersionInfo (FileVersionInfo documentation)

Si desea que la versión de ensamblado, entonces tendrá que cargar el montaje utilizando la reflexión. No es un ejemplo de cómo hacer esto en code plex

4
FileVersionInfo fi = FileVersionInfo.GetVersionInfo(path); 
string fileVersion = fi.FileVersion; 

En Windows, la "versión del archivo" y "Versión del producto" son los mismos (o al menos lo es para un .dll administrado).

+1

La versión del archivo y la versión del producto también pueden diferir para dlls gestionados. [AssemblyFileVersion] vs [AssemblyInformationalVersion]. Consulte http://stackoverflow.com/questions/7770068/get-the-net-assemblys-assemblyinformationalversion-value y http://stackoverflow.com/questions/64602/what-are-differences-between-assemblyversion-assemblyfileversion-and -assemblyin –

0

para la versión del archivo de ensamblaje .net puede ser algo 1.0. , 1.1. 1.2. , 2.0. así sucesivamente en otras palabras, el editor puede optar por corregir la versión mayor y menor para el proyecto, pero deja el resto en .net para compilar e incrementar. Por otro lado

string version=System.Reflection.Assembly.GetExecutingAssembly() 
    .GetName().Version.ToString(); 

dará el número de versión completa con mayor, menor, números de compilación

el código C# anterior funciona en la ejecución de .exe y .dll ejecutar

por supuesto si Si intentas usar el dll de alguien, puedes usar la sugerencia de Eclipsed4utoo o de EricSchaefer, dependiendo de cómo el editor elija asignar la versión y la compilación.

Cuestiones relacionadas