web-dev-qa-db-ja.com

コマンドラインからのアセンブリバージョン?

コマンドラインからDLLファイルのアセンブリバージョンを取得するMicrosoftツールはありますか?

(自分のツールをコーディングできることを知っています。)

55

これは、PowerShellが輝く領域です。まだお持ちでない場合は、インストールしてください。 Windows 7にプリインストールされています。

このコマンドラインの実行:

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

これを出力します:

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

LoadFromはAssemblyオブジェクトを返すので、ほとんど何でも好きなことができることに注意してください。プログラムを書く必要はありません。

87
OregonGhost

モノとLinuxを使用している場合、これを試してください:

monodis --Assembly MyAssembly.dll

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

私のように、そのようなツールを探している人たちのために:

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

次のエラーが表示されるまで、選択した回答を使用しました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

それらのケースで動作するはずです(おそらくすべてのケース)

2
gilmishal

うわー、これは古い悪用可能なgdiplus.dllが浮かんでいるようなことを考えると悪いことです。

私の解決策は簡単です。バッチファイルプログラミング。

これにより、nfoファイルがバージョンと同じディレクトリに配置されます

Filever.exeを取得できます。これは、Windowsの一部としてダウンロードできますXP SP2サポートツールパッケージ-わずか4.7MBのダウンロード。

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

SysternalsによるSigcheckもあります。

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

1
Tail-Gunner

ファイルバージョンツールが役立ちます。

filever /V YourDllName.dll
0
Antony Thomas

他のパワーシェルのような答えに砂糖を追加する...

「FullName」などの拡張プロパティを取得するには

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