【问题标题】:.NET Core 3.1 read Assembly's File Version.NET Core 3.1 读取程序集的文件版本
【发布时间】:2020-05-25 14:20:18
【问题描述】:

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

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 = ... 呢?

【问题讨论】:

  • 因为您正在将“my.dll”加载到正在运行的应用程序中。所以“my.dll”需要另一个你没有像错误一样加载的程序集。 (mvc.core)。使用 system.diagnostic 中的 FileVersionInfo.GetVersionInfo("my.dll").FileVersion 来避免错误。
  • @anilcemsimsek 你是对的,谢谢,它有效。我查了nuget包Microsoft.AspNetCore.Mvc.Core,没有3.1.0.0版本。这很奇怪

标签: c# .net-core-3.1


【解决方案1】:

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.dll,则versionNumber 将等于上述示例代码中的“4.4.4.0”。

【讨论】:

    【解决方案2】:

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

     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;
    

    【讨论】:

      猜你喜欢
      • 2020-04-23
      • 2020-04-25
      • 2020-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-25
      • 1970-01-01
      • 2019-11-25
      相关资源
      最近更新 更多