コマンドラインからDLLファイルのアセンブリバージョンを取得するMicrosoftツールはありますか?
(自分のツールをコーディングできることを知っています。)
これは、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オブジェクトを返すので、ほとんど何でも好きなことができることに注意してください。プログラムを書く必要はありません。
モノとLinuxを使用している場合、これを試してください:
monodis --Assembly MyAssembly.dll
find . -name MyAssembly.dll -exec monodis --Assembly {} ';' | grep Version
私のように、そのようなツールを探している人たちのために:
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));
}
}
}
}
Powershellで
$version = [System.Diagnostics.FileVersionInfo]::GetVersionInfo("filepath.exe").FileVersion.ToString()
次のエラーが表示されるまで、選択した回答を使用しました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
それらのケースで動作するはずです(おそらくすべてのケース)
うわー、これは古い悪用可能な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
ファイルバージョンツールが役立ちます。
filever /V YourDllName.dll
他のパワーシェルのような答えに砂糖を追加する...
「FullName」などの拡張プロパティを取得するには
$dllPath = "C:\full\path\to\YourDllName.dll";
$ass = [System.Reflection.Assembly]::LoadFrom($dllPath);
$ass.GetName();
$ass