.NET Core 3.1 读取程序集的文件版本

.NET Core 3.1 read Assembly's File Version

在我的控制台应用程序中,我需要加载一些外部程序集的文件版本值。

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=neutral, PublicKeyToken=adb9793829ddae60'

当调用 GetCustomAttribute 方法时,但如果两行都被使用,则一切正常。那么,如何修复它才能使用 var assembly1 = ...var assembly2 = ...

FileVersionInfo.GetVersionInfo 不尝试将整个 DLL 加载到应用程序中:

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

string versionNumber = fvo.FileVersion;

如果用dotnet build -p:Version=4.4.4构建my.dllversionNumber将等于上述示例代码中的“4.4.4.0”。

以下代码正常,请检查路径是否正确

 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;