. NET Core 3.1 читает версию файла сборки - PullRequest
0 голосов
/ 25 мая 2020

в моем консольном приложении мне нужно загрузить значение версии файла какой-либо внешней сборки.

var assembly1 = Assembly.LoadFrom("my.dll");
var assembly2 = AssemblyLoadContext.Default.LoadFromAssemblyPath("my.dll");

var versionNumber = assembly1.GetCustomAttribute<AssemblyFileVersionAttribute>().Version;

и вот в чем дело - если я использую var assembly1 = ... или var assembly2 = ..., я получаю неприятное сообщение об ошибке

Не удалось загрузить файл или сборку Microsoft.AspNetCore. Mvc .Core, Version = 3.1.0.0, Culture = нейтральный, PublicKeyToken = adb9793829ddae60 '

при вызове метода GetCustomAttribute, но если используются обе строки, то все работает нормально. Итак, как это исправить, чтобы можно было использовать var assembly1 = ... или var assembly2 = ...?

Ответы [ 2 ]

2 голосов
/ 25 мая 2020

FileVersionInfo.GetVersionInfo не пытается загрузить всю DLL в приложение:

System.Diagnostics.FileVersionInfo fvo = 
    System.Diagnostics.FileVersionInfo.GetVersionInfo(@"my.dll");

string versionNumber = fvo.FileVersion;

Если вы собираете my.dll с dotnet build -p:Version=4.4.4, versionNumber будет равно "4.4.4.0 "в приведенном выше примере кода.

0 голосов
/ 25 мая 2020

следующий код является нормальным, проверьте правильность пути.

 private const string AssemblyPath = "C:\\Users\\test.dll";
 var assembly2 = AssemblyLoadContext.Default.LoadFromAssemblyPath(AssemblyPath);
 var versionNumber = assembly2.GetCustomAttribute<AssemblyFileVersionAttribute>().Version;

или

 private const string AssemblyPath = "C:\\Users\\test.dll";
var assembly1 = Assembly.LoadFrom(AssemblyPath);
var versionNumber = assembly1.GetCustomAttribute<AssemblyFileVersionAttribute>().Version;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...