Как получить идентификатор версии модуля (MVID) сборки .NET, используя отражение в c #?
Должно быть:
var myAssembly = Assembly.GetExecutingAssembly(); //or whatever var mvid = myAssembly.ManifestModule.ModuleVersionID;
В сборке могут быть и другие модули, но модуль ManifestModule будет «идентифицировать» саму сборку.
Вот пример, который не использует 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