如何在Linux中获取.Net文件的AssemblyVersion

cygmwpex  于 2023-04-05  发布在  Linux
关注(0)|答案(6)|浏览(492)

有没有什么方法可以在Linux中获得.Net可执行文件的AssemblyVersion而不使用mono?我试图拥有的是一个脚本或命令,可以让我在Linux机器上获得AssemblyVersion。我试过:

#strings file.exe | grep AssemblyVersion

,但它只是字符串而不是数字。还检查了:

#file file.exe

但只得到一般信息。
有什么想法吗

u1ehiz5o

u1ehiz5o1#

尝试匹配跨越整行的版本号:

$ strings file.exe | egrep '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$'

在我的(少数)测试中,二进制文件的AssemblyVersion总是最后的结果。

xpszyzbs

xpszyzbs2#

根据Jb Evain的建议,您可以使用Mono Disassembler

monodis --assembly file.exe | grep Version
dgiusagp

dgiusagp3#

ikdasm工具也是distributed with Mono,它比monodis更健壮,不幸的是,monodis崩溃并显示消息“Segmentation fault:11”。维护人员明确建议使用ikdasm而不是monodis:https://github.com/mono/mono/issues/8900#issuecomment-428392112
用法示例(使用monodis当前无法处理的程序集):

ikdasm -assembly System.Runtime.InteropServices.RuntimeInformation.dll | grep Version:
ryevplcw

ryevplcw4#

这是一个非常老的问题,几乎所有的东西都改变了,但是从dotnet 2.1开始(所以你可以dotnet tool install),你可以安装dotnet-ildasm

dotnet tool install --tool-path . dotnet-ildasm

你可以使用这个函数:

function dll_version {
  local dll="$1"
  local version_line
  local version

  version_line="$(./dotnet-ildasm "$dll" | grep AssemblyFileVersionAttribute)"
  # Uses SerString format:
  #   01 00 is Prolog
  #   SZARRAY for NumElem
  #   version chars for Elem
  #   00 00 for NamedArgs
  # See:
  #   https://www.ecma-international.org/publications/files/ECMA-ST/ECMA-335.pdf#%5B%7B%22num%22%3A2917%2C%22gen%22%3A0%7D%2C%7B%22name%22%3A%22XYZ%22%7D%2C87%2C321%2C0%5D
  [[ $version_line =~ \(\ 01\ 00\ [0123456789aAbBcCdDeEfF][0123456789aAbBcCdDeEfF]\ (.*)\ 00\ 00\ \)$ ]]
  dotcount=0
  for i in ${BASH_REMATCH[1]}; do
    if [[ $i =~ ^2[eE]$ ]]; then
      (( dotcount++ ))
    fi
    if (( dotcount == 3 )); then
      break
    fi
    echo -n -e "\u$i"
  done
}
yxyvkwin

yxyvkwin5#

要使用monodis只返回vision,请使用以下代码

monodis --assembly LDAPService.dll | grep Version | awk -F ' ' '{print $2}'

安装包:https://command-not-found.com/monodis
例如在ubuntu中

apt-get install mono-utils
guz6ccqo

guz6ccqo6#

另一种选择是使用exiftool,如:

$ exiftool -AssemblyVersion -ProductVersion ./System.Private.CoreLib.dll
Assembly Version                : 7.0.0.0
Product Version                 : 7.0.4+0a396acafe9a7d46bce11f4338dbb3dd0d99b1b4

相关问题