c# - Linux环境下获取dll元数据
问题描述
我希望能够在 Linux 环境中(即在运行任何docker 映像时)获取任何dll
(尽可能支持 dotnet 版本)的元数据。mcr.microsoft.com/dotnet/core/sdk
那能实现吗?
通过元数据,我的意思是我可以在不加载代码的情况下讲述的所有内容(最重要的 - 命名空间、版本)。
我观察到Assembly.ReflectionOnlyLoadFrom(),但它似乎不支持 pre-dotnet-core 版本。
我不限于编程语言,仅限于基于 Linux 的运行时。
解决方案
使用AssemblyMetadata
from Microsoft.CodeAnalysis.Common
package 您可以读取 dll 的内容,例如版本、模块、类型、参考、属性以及几乎所有内容
var path = @"path/to/dll/file.dll";
var metadata = AssemblyMetadata.CreateFromFile(path);
var module = metadata.GetModules().First();
Console.WriteLine(module.Name);
var reader = module.GetMetadataReader();
var assemblyDef = reader.GetAssemblyDefinition();
Console.WriteLine(reader.GetString(assemblyDef.Name));
Console.WriteLine(assemblyDef.Version.ToString());
foreach (var typeDefHandle in reader.TypeDefinitions)
{
var typeDef = reader.GetTypeDefinition(typeDefHandle);
var fullName = (reader.GetString(typeDef.Namespace) + "::" + reader.GetString(typeDef.Name));
Console.WriteLine(fullName);
}
推荐阅读
- r - 使用 R 中的数据时间数据计算经过的时间
- python - QuickSort 的迭代和递归基准测试的结果应该是这样的?
- java - 我的解决方案中是否存在逻辑流程问题?
- excel - 计算 imagej 或 excel 上每对 31 个数组之间的均方误差
- java - Java 控制台输入长度限制
- active-directory - DirectorySearcher() 和 AuthenticationTypes 枚举
- ios - 如何在 ForEach 中绑定 @State 变量的属性?
- libasound - 来自 libasound 函数 snd_pcm_hw_params 的令人困惑的错误
- mysql - Mysql - 按大于或小于当前时间的日期对记录进行分组 now() mysql
- sql - SQL WHERE + MAX 查询