2010-06-14 11 views

Répondre

68

C'est un domaine où brille PowerShell. Si vous ne l'avez pas déjà, installez-le. Il est pré-installé avec Windows 7.

L'exécution de cette ligne de commande:

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

sorties ceci:

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

Notez que LoadFrom returnes un objet de montage, de sorte que vous pouvez faire quoi que ce soit à peu près que vous aimez. Pas besoin d'écrire un programme.

+1

Y a-t-il un moyen de faire cela fonctionner dans les assemblages en mode mixte? –

+2

Je m'attendrais à ce qu'il fonctionne de manière similaire. Mes tests ont échoué, cependant, avec un message d'erreur indiquant que la version d'exécution de l'assembly en mode mixte est plus récente que celle chargée - ne savez pas comment contourner cela. – OregonGhost

+2

Pour obtenir uniquement le numéro de version, ajoutez '.ToString()' à la fin, par ex. '[System.Reflection.Assembly] :: LoadFrom (" YourDllName.dll "). GetName(). Version.ToString()' –

8

Pour ceux qui, comme moi, qui viennent à la recherche d'un tel outil:

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

Ces petits morceaux de code sont les meilleurs (et plus faciles à maintenir) lorsqu'ils sont conservés sous forme de scripts. Je recommande fortement le projet cs-script pour réaliser ceci. –

1

Wow c'est mal vu des choses comme vieux gdiplus.dll flottant autour de exploitable.

Ma solution est simple. programmation par lots.

Cela met un fichier nfo dans le même répertoire avec la version

Vous pouvez obtenir Filever.exe, qui peut être téléchargé dans le cadre du Service Pack 2 Windows XP Support Package Outils - seulement 4.7MB de téléchargement.

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 

Variation.

Obtenez toutes les versions d'un répertoire dans un fichier texte.

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

exit 

Il y a aussi Sigcheck by systernals.

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

0

outil version du fichier vous aidera:

filever /V YourDllName.dll 
+0

Quoi et où est-ce? – Brannon

+0

Il était sous XP http://support.microsoft.com/kb/913111 –

+0

Il est dans [Windows XP Service Pack 2 Outils de support] (http://www.microsoft.com/en-us/download/ details.aspx? id = 18546). Cependant, ceci ne peut être installé que sur un système XP. SO, pour obtenir le fichier pour Win7/8, 'décompressez' l'installation exe avec un outil comme 7-Zip. Extrayez le fichier 'support.cab' à l'intérieur. Puis encore une fois, décompressez ce CAB en utilisant 7-Zip et vous pouvez obtenir 'filever.exe'. – laifukang

15

Si vous utilisez mono et linux, essayez ceci:

monodis --assembly MyAssembly.dll 

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

utilisez-vous GACUTIL?

Vous pouvez obtenir la version d'assemblage à partir de cette commande ci-dessous.

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

/l [] Répertorie le contenu du cache de l'assembly global. Lorsque le paramètre facultatif est spécifié, seuls les assemblys correspondants sont répertoriés. – JJS

+1

Cela ne fonctionne pas pour moi si j'ai un assemblage local, par ex. dans un paquet NUGET. Gacutil ne fonctionne que pour les assemblages dans le GAC. – Matt

3

En Powershell

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

J'ai utilisé la réponse choisie jusqu'à ce que je l'erreur suivante Reference assemblies should not be loaded for execution. They can only be loaded in the Reflection-only loader context. pour plusieurs ensembles

utilisant

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

devrait fonctionner dans les cas (probablement tous les cas)

Questions connexes