Версия сборки из командной строки? - PullRequest
55 голосов
/ 14 июня 2010

Существует ли средство Microsoft для получения версии сборки DLL-файла из командной строки?

(я знаю, что могу написать свой собственный инструмент).

Ответы [ 9 ]

87 голосов
/ 14 июня 2010

Это область, где сияет PowerShell. Если у вас его еще нет, установите его. Он предустановлен в Windows 7.

Запуск этой командной строки:

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

выводит это:

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

Обратите внимание, что LoadFrom возвращает объект сборки, так что вы можете делать практически все что угодно. Не нужно писать программу.

15 голосов
/ 13 марта 2013

Если вы используете Mono и Linux, попробуйте это:

monodis --assembly MyAssembly.dll

find . -name MyAssembly.dll -exec monodis --assembly {} ';' | grep Version 
9 голосов
/ 26 мая 2011

Для тех, кто, как и я, ищет такой инструмент:

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));
            }
        }
    }
}
5 голосов
/ 27 июля 2016

В Powershell

$version = [System.Diagnostics.FileVersionInfo]::GetVersionInfo("filepath.exe").FileVersion.ToString()
2 голосов
/ 08 октября 2017

Я использовал выбранный ответ, пока не получил следующую ошибку Reference assemblies should not be loaded for execution. They can only be loaded in the Reflection-only loader context. для нескольких сборок

с использованием

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

должно работать в этих случаях (вероятно, во всех случаях)

1 голос
/ 07 октября 2012

Ух ты, это плохо, учитывая такие вещи, как старый эксплуатируемый файл gdiplus.dll.

Мое решение простое.программирование пакетных файлов.

Это помещает файл nfo в тот же каталог с версией

. Вы можете получить GET filever.exe, который можно загрузить как часть пакета средств поддержки Windows XP SP2всего 4,7 Мбайт для загрузки.

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

Вариация.

Получить все версии в каталоге в текстовый файл.

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

exit

Существует также Sigcheck от systernals.

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

0 голосов
/ 12 октября 2018

Добавление сахара к другим ответам powershell-ish ...

Чтобы получить расширенные свойства, такие как 'FullName'

$dllPath = "C:\full\path\to\YourDllName.dll";
$ass  = [System.Reflection.Assembly]::LoadFrom($dllPath);
$ass.GetName();
$ass
0 голосов
/ 03 июня 2013

Используете ли вы GACUTIL ?

Вы можете получить версию сборки из этой команды ниже.

C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\gacutil.exe /L "<your assembly name>"
0 голосов
/ 30 ноября 2012

Инструмент версии файла поможет:

filever /V YourDllName.dll
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...