如何从正在运行的程序集获取程序集的.net 7+处理器架构?

xzv2uavs  于 2023-03-24  发布在  .NET
关注(0)|答案(2)|浏览(180)

在.net 6之前,我可以通过以下方式获得当前程序集的处理器架构(例如MSIL,Amd64):

Assembly.GetExecutingAssembly().GetName().ProcessorArchitecture

obsolete since .net7
有人建议使用命名空间System.Reflection.Metadata中的一些东西。但是不清楚如何获取ProcessorArchitecture
如何获取这段信息?最好不用给予出程序集名称。

6g8kf2rb

6g8kf2rb1#

你可以从Module信息中得到这一点,它代表了实际的DLL。它有一个GetPEKind函数,该函数返回关于编译它的体系结构的信息。

Assembly.GetExecutingAssembly().Modules.First().GetPEKind(out var pekind, out var machine);
Console.WriteLine(pekind);
Console.WriteLine(machine);

dotnetfiddle
请注意,理论上,一个程序集可以有多个模块,尽管这并不常见。

9lowa7mx

9lowa7mx2#

PE文件头中也有类似的内容,

using System;
using System.IO;
using System.Reflection.PortableExecutable;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            using var fs = new FileStream(@"Example.dll", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            using var peReader = new PEReader(fs);
            Machine machine = peReader.PEHeaders.CoffHeader.Machine;
            Console.WriteLine(machine);
        }
    }
}

Machine的值可以在this reference中找到。

相关问题