Получить MVID сборки из c #? - PullRequest
7 голосов
/ 03 марта 2011

Как получить идентификатор версии модуля (MVID) сборки .NET, используя отражение в c #?

Ответы [ 2 ]

10 голосов
/ 03 марта 2011

Должно быть:

var myAssembly = Assembly.GetExecutingAssembly(); //or whatever
var mvid = myAssembly.ManifestModule.ModuleVersionID;

В сборке могут быть и другие модули, но модуль ManifestModule будет «идентифицировать» саму сборку.

3 голосов
/ 10 апреля 2017

Вот пример, который не использует Reflection для загрузки сборки, но вместо этого использует System.Reflection.Metadata :

using (var stream = File.OpenRead(filePath))
{
    PEReader reader = new PEReader(stream);
    var metadataReader = reader.GetMetadataReader();
    var mvidHandle = metadataReader.GetModuleDefinition().Mvid;
    var mvid = metadataReader.GetGuid(mvidHandle);
}

А вот пример использования Mono.Cecil :

var module = Mono.Cecil.ModuleDefinition.ReadModule(filePath);
var mvid = module.Mvid;

А вот пример автономного кода для чтения MVID без каких-либо зависимостей. Это урезанная версия Mono.Cecil в одном файле: https://github.com/KirillOsenkov/MetadataTools/blob/master/src/PEFile/ImageReader.cs

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...