web-dev-qa-db-fra.com

Version d'assemblage en ligne de commande?

Existe-t-il un outil Microsoft permettant d’obtenir la version Assembly d’un fichier DLL à partir d’une ligne de commande?

(Je sais que je peux coder mon propre outil.)

52
Patrice Pezillier

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

Lancer cette ligne de commande:

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

affiche ceci:

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

Notez que LoadFrom renvoie un objet Assembly, vous pouvez donc faire à peu près tout ce que vous voulez. Pas besoin d'écrire un programme.

83
OregonGhost

Si vous utilisez mono et linux, essayez ceci:

monodis --Assembly MyAssembly.dll

find . -name MyAssembly.dll -exec monodis --Assembly {} ';' | grep Version 
15
head_thrash

Pour ceux qui, comme moi, viennent chercher 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));
            }
        }
    }
}
9
Paul Ruane

À Powershell

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

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

en utilisant 

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

devrait fonctionner dans ces cas (probablement tous les cas)

1
gilmishal

Wow, c'est mauvais si l'on considère des choses comme les anciens gdiplus.dll exploitables qui flottent.

Ma solution est simple. programmation par lots.

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

Vous pouvez obtenir le fichier filever.exe, qui peut être téléchargé avec le package Windows XP SP2 Support Tools - téléchargement de seulement 4,7 Mo.

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 par systernals.

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

1
Tail-Gunner

L'outil de version de fichier vous aidera à:

filever /V YourDllName.dll
0
Antony Thomas

Ajouter du sucre aux autres réponses éclairées ...

Pour obtenir des propriétés étendues telles que 'FullName'

$dllPath = "C:\full\path\to\YourDllName.dll";
$ass  = [System.Reflection.Assembly]::LoadFrom($dllPath);
$ass.GetName();
$ass
0
OzBob