【问题标题】:Version number of a dll in .NET.NET 中 dll 的版本号
【发布时间】:2010-12-04 23:53:56
【问题描述】:

鉴于以下情况:

string file = @"c:\somepath\somefile.dll";

如何使用 .NET 找到该 DLL 的文件和产品版本号?

dll 可以是本地的也可以是托管的。

谢谢。

【问题讨论】:

    标签: c# .net dll versioning


    【解决方案1】:

    是的,使用System.Diagnostics.FileVersionInfo。

    string fileVersion = FileVersionInfo.GetVersionInfo(file).FileVersion;
    string productVersion = FileVersionInfo.GetVersionInfo(file).ProductVersion;
    

    请注意,程序集的文件版本可能与其程序集版本不同。程序集版本是程序集标识的一部分。

    【讨论】:

    • 感谢 Lars,我不知何故忽略了 FileVersionInfo 类。
    • 我对这个 FileVersionInfo 类有疑问。我找不到它了。我尝试使用命名空间 System::Diagnostics 但它不在诊断中。我尝试了 clr 项目,空的 c++ 项目,我链接了 version.lib,system.dll,但仍然找不到它。请帮忙。
    • 请注意 FileVersionInfo.FileVersion 是一个可能不是最新的字符串表示形式。您应该查看 FileVersionInfo.FileMajorPart、FileMinorPart、FileBuildPart、FilePrivatePart。见GetFileVersionInfo() returns wrong file's version information
    【解决方案2】:

    我不了解原生 dll,但使用托管 dll 的工作方式如下:

    System.Reflection.Assembly.LoadFile(file).GetName().Version
    

    编辑:我认为您可以使用 GetFileVersionInfo()... 阅读 C 中的版本信息...

    【讨论】:

    • 建议:返回程序集版本,而不是文件版本。两者可能不同。
    • 它也和win32函数GetFileVersionInfo不一样,返回的是File版本而不是Assembly版本。
    • 这不也加载程序集,包括执行静态构造函数吗?
    • 确实如此。但我相信在使用它们的类之前不会调用静态ctor。例如。您的静态ctor不会在应用程序启动时调用,而是在您第一次使用该类的静态方法或实例化对象时调用。但我可能记错了。乔恩?
    【解决方案3】:
     FileVersionInfo fi = FileVersionInfo.GetVersionInfo(path);
     string fileVersion = fi.FileVersion;
    

    在 Windows 中,“文件版本”和“产品版本”是相同的(或至少对于托管 .dll 而言)。

    【讨论】:

    【解决方案4】:

    一个程序集中有三个版本号。有关它们采用什么值、谁使用它们以及如何阅读它们的信息,请参阅http://all-things-pure.blogspot.com/2009/09/assembly-version-file-version-product.html。

    【讨论】:

      【解决方案5】:

      如果您想要文件版本信息,请使用 FileVersionInfo 类 (FileVersionInfo documentation)

      如果您需要程序集版本,则需要使用反射加载该程序集。 code plex上有一个例子说明如何做到这一点

      【讨论】:

        【解决方案6】:

        .net 程序集文件版本可能是 1.0.、1.1. 1.2.、2.0. 等等 换句话说,发布者可以选择修复项目的主要和次要版本,但将其余部分留给 .net 进行编译和增量。 另一方面

        string version=System.Reflection.Assembly.GetExecutingAssembly()
            .GetName().Version.ToString();
        

        将给出完整的版本号以及主要、次要、内部版本号

        上面的c#代码在执行.exe和执行.dll时起作用

        当然,如果您尝试使用某人的 dll,您可以使用 Eclipsed4utoo 或 EricSchaefer 的建议,具体取决于发布者如何选择分配版本和构建。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-01-04
          • 2011-03-28
          • 1970-01-01
          • 1970-01-01
          • 2012-09-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多