命令行的汇编版本?

Pat*_*ier 57 dll assemblies version visual-studio-2010

是否有Microsoft工具从命令行获取DLL文件的汇编版本?

(我知道我可以编写自己的工具.)

Ore*_*ost 88

这是PowerShell闪耀的领域.如果您还没有,请安装它.它预装了Windows 7.

运行此命令行:

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

输出:

Major  Minor  Build  Revision
-----  -----  -----  --------
3      0      8      0
Run Code Online (Sandbox Code Playgroud)

请注意,LoadFrom返回一个程序集对象,因此您可以执行任何您喜欢的操作.无需编写程序.

  • 我希望它的工作方式类似.但是,我的测试失败了,并显示一条错误消息,指出混合模式程序集的运行时版本比加载的版本更新 - 不知道如何规避这一点. (2认同)
  • 要获取版本号,请在末尾附加`.ToString()`,例如`[System.Reflection.Assembly] :: LoadFrom("YourDllName.dll").GetName().Version.ToString()` (2认同)
  • 这个解决方案有几点需要注意.1)它采用DLL的完整路径.示例中的相对路径不起作用.2)它将程序集标记为"正在使用",这会阻止它在您退出PowerShell进程之前被替换.这可以阻止构建或删除文件夹等.为了解决这个问题,要么在脚本中执行,要么再次调用"powershell",然后在完成后退出子进程powershell. (2认同)

hea*_*ash 15

如果你使用mono和linux,试试这个:

monodis --assembly MyAssembly.dll

find . -name MyAssembly.dll -exec monodis --assembly {} ';' | grep Version 
Run Code Online (Sandbox Code Playgroud)


Pau*_*ane 9

对于那些像我一样,寻找这样一个工具的人:

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));
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 5

在Powershell

$version = [System.Diagnostics.FileVersionInfo]::GetVersionInfo("filepath.exe").FileVersion.ToString()
Run Code Online (Sandbox Code Playgroud)

  • 文件版本与程序集版本不同 (4认同)