Получить метаданные dll в среде Linux - PullRequest
0 голосов
/ 27 октября 2019

Я хочу иметь возможность получать метаданные любых dll (с максимально возможной поддержкой версий dotnet) в среде Linux (то есть при запуске любых mcr.microsoft.com/dotnet/core/sdk образов Docker).

Может ли это быть достигнуто?

Под метаданными я подразумеваю все, что я могу рассказать о коде без его загрузки (самое главное - пространства имен, версия).

Я наблюдал Assembly.ReflectionOnlyLoadFrom () , но, похоже, он не поддерживает версии, предшествующие дотнет-ядру.

Я не ограничен языками программирования, только средой исполнения на основе Linux.

Ответы [ 2 ]

1 голос
/ 30 октября 2019

Используя AssemblyMetadata из пакета Microsoft.CodeAnalysis.Common, вы можете читать содержимое 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);
}
0 голосов
/ 28 октября 2019

Я не смог заставить ни один из стандартных инструментов работать за пределами Windows (ilspy, dnspy, ildasm)

Однако exiftool, на который ссылается этот вопрос , кажется, работает нормально для предоставлениянекоторые метаданные, хотя они все еще ограничены.

Пример вывода для exiftool Newtonsoft.Json.net45.dll:

ExifTool Version Number         : 11.73
File Name                       : Newtonsoft.Json.net45.dll
Directory                       : .
File Size                       : 660 kB
File Modification Date/Time     : 2019:04:22 02:06:26+03:00
File Access Date/Time           : 2019:10:28 10:11:25+02:00
File Inode Change Date/Time     : 2019:10:28 10:09:56+02:00
File Permissions                : rwxr-xr-x
File Type                       : Win32 DLL
File Type Extension             : dll
MIME Type                       : application/octet-stream
Machine Type                    : Intel 386 or later, and compatibles
Time Stamp                      : 2092:04:05 06:43:32+03:00
Image File Characteristics      : Executable, Large address aware, DLL
PE Type                         : PE32
Linker Version                  : 48.0
Code Size                       : 665088
Initialized Data Size           : 2048
Uninitialized Data Size         : 0
Entry Point                     : 0xa42ba
OS Version                      : 4.0
Image Version                   : 0.0
Subsystem Version               : 6.0
Subsystem                       : Windows command line
File Version Number             : 12.0.2.23222
Product Version Number          : 12.0.2.0
File Flags Mask                 : 0x003f
File Flags                      : (none)
File OS                         : Win32
Object File Type                : Dynamic link library
File Subtype                    : 0
Language Code                   : Neutral
Character Set                   : Unicode
Comments                        : Json.NET is a popular high-performance JSON framework for .NET
Company Name                    : Newtonsoft
File Description                : Json.NET
File Version                    : 12.0.2.23222
Internal Name                   : Newtonsoft.Json.dll
Legal Copyright                 : Copyright © James Newton-King 2008
Legal Trademarks                :
Original File Name              : Newtonsoft.Json.dll
Product Name                    : Json.NET
Product Version                 : 12.0.2+4ab34b0461fb595805d092a46a58f35f66c84d6a
Assembly Version                : 12.0.0.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...