카테고리 보관물: C#

C#

프로그래밍 방식으로 DLL의 버전 번호 가져 오기

.NET DLL에서 프로그래밍 방식으로 버전 번호를 얻을 수 있습니까?

그렇다면 어떻게?



답변

Assembly assembly = Assembly.LoadFrom("MyAssembly.dll");
Version ver = assembly.GetName().Version;

중요 :
이것은 원래 질문에 대한 최선의 답변이 아니라는 점에 유의해야합니다. 이 페이지에서 자세한 내용을 읽으십시오.


답변

dll이 .net 또는 Win32 인 경우 작동합니다 . 리플렉션 방법은 dll이 .net 인 경우에만 작동합니다. 또한 리플렉션을 사용하면 전체 dll을 메모리에로드하는 오버 헤드가 있습니다. 아래 방법은 어셈블리를 메모리에로드하지 않습니다.

// Get the file version.
FileVersionInfo myFileVersionInfo = FileVersionInfo.GetVersionInfo(@"C:\MyAssembly.dll");

// Print the file name and version number.
Console.WriteLine("File: " + myFileVersionInfo.FileDescription + '\n' +
                  "Version number: " + myFileVersionInfo.FileVersion);

보낸 사람 : http://msdn.microsoft.com/en-us/library/system.diagnostics.fileversioninfo.fileversion.aspx

원본 출처


답변

우선, 관심을 가질만한 두 가지 가능한 ‘버전’이 있습니다.

  • 모든 실행 파일에 적용 가능한 Windows 파일 시스템 파일 버전

  • 컴파일러가 .NET 어셈블리에 포함하는 어셈블리 빌드 버전 (분명히 .NET 어셈블리 dll 및 exe 파일에만 해당)

전자의 경우 Ben Anderson의 답변을 사용해야합니다. 후자의 경우 AssemblyName.GetAssemblyName(@"c:\path\to\file.dll").Version어셈블리가 코드에서 참조되는 경우, 또는 Tataro의 답변을 사용하십시오.

.Load()/ .LoadFrom()메소드 를 사용하는 모든 답변을 무시할 수 있습니다.이 방법은 실제로 현재 AppDomain에 어셈블리를로드하기 때문에 트리를 자르는 것과 비슷합니다.


답변

다음은 약간의 리플렉션을 사용하여 특정 클래스를 포함하는 DLL 버전을 얻는 좋은 방법입니다.

var ver = System.Reflection.Assembly.GetAssembly(typeof(!Class!)).GetName().Version;

그냥 클래스를 교체하십시오! 버전을 얻으려는 DLL에 정의 된 클래스 이름으로.

다른 배포에 대해 DLL을 이동하면 파일 경로를 변경할 필요가 없기 때문에 이것이 내가 선호하는 방법입니다.


답변

시작된 어셈블리 (윈폼, 콘솔 앱 등)를 얻으려면

using System.Reflection;
...
Assembly.GetEntryAssembly().GetName().Version


답변

Kris, 실제 DLL 파일에서 어셈블리를로드해야 할 때 (그리고 DLL이있는 경우) 버전이 훌륭하게 작동하지만 DLL이 EMBEDDED 인 경우 (예 : 파일이 아니라 포함 된 경우) 원치 않는 오류가 발생합니다 DLL).

다른 하나는 ” 1.2012.0508.0101 ” 과 같은 버전 관리 체계를 사용하는 경우 버전 문자열을 가져 오면 실제로 ” 1.2012.518.101 “이됩니다. 누락 된 0을 확인하십시오 .

따라서 다음은 DLL 버전 (내장 또는 DLL 파일)을 가져 오는 몇 가지 추가 기능입니다.

    public static System.Reflection.Assembly GetAssembly(string pAssemblyName)
    {
        System.Reflection.Assembly tMyAssembly = null;

        if (string.IsNullOrEmpty(pAssemblyName)) { return tMyAssembly; }
        tMyAssembly = GetAssemblyEmbedded(pAssemblyName);
        if (tMyAssembly == null) { GetAssemblyDLL(pAssemblyName); }

        return tMyAssembly;
    }//System.Reflection.Assembly GetAssemblyEmbedded(string pAssemblyDisplayName)


    public static System.Reflection.Assembly GetAssemblyEmbedded(string pAssemblyDisplayName)
    {
        System.Reflection.Assembly tMyAssembly = null;

        if(string.IsNullOrEmpty(pAssemblyDisplayName)) { return tMyAssembly; }
        try //try #a
        {
            tMyAssembly = System.Reflection.Assembly.Load(pAssemblyDisplayName);
        }// try #a
        catch (Exception ex)
        {
            string m = ex.Message;
        }// try #a
        return tMyAssembly;
    }//System.Reflection.Assembly GetAssemblyEmbedded(string pAssemblyDisplayName)


    public static System.Reflection.Assembly GetAssemblyDLL(string pAssemblyNameDLL)
    {
        System.Reflection.Assembly tMyAssembly = null;

        if (string.IsNullOrEmpty(pAssemblyNameDLL)) { return tMyAssembly; }
        try //try #a
        {
            if (!pAssemblyNameDLL.ToLower().EndsWith(".dll")) { pAssemblyNameDLL += ".dll"; }
            tMyAssembly = System.Reflection.Assembly.LoadFrom(pAssemblyNameDLL);
        }// try #a
        catch (Exception ex)
        {
            string m = ex.Message;
        }// try #a
        return tMyAssembly;
    }//System.Reflection.Assembly GetAssemblyFile(string pAssemblyNameDLL)


    public static string GetVersionStringFromAssembly(string pAssemblyDisplayName)
    {
        string tVersion = "Unknown";
        System.Reflection.Assembly tMyAssembly = null;

        tMyAssembly = GetAssembly(pAssemblyDisplayName);
        if (tMyAssembly == null) { return tVersion; }
        tVersion = GetVersionString(tMyAssembly.GetName().Version.ToString());
        return tVersion;
    }//string GetVersionStringFromAssemblyEmbedded(string pAssemblyDisplayName)


    public static string GetVersionString(Version pVersion)
    {
        string tVersion = "Unknown";
        if (pVersion == null) { return tVersion; }
        tVersion = GetVersionString(pVersion.ToString());
        return tVersion;
    }//string GetVersionString(Version pVersion)


    public static string GetVersionString(string pVersionString)
    {
        string tVersion = "Unknown";
        string[] aVersion;

        if (string.IsNullOrEmpty(pVersionString)) { return tVersion; }
        aVersion = pVersionString.Split('.');
        if (aVersion.Length > 0) { tVersion = aVersion[0]; }
        if (aVersion.Length > 1) { tVersion += "." + aVersion[1]; }
        if (aVersion.Length > 2) { tVersion += "." + aVersion[2].PadLeft(4, '0'); }
        if (aVersion.Length > 3) { tVersion += "." + aVersion[3].PadLeft(4, '0'); }

        return tVersion;
    }//string GetVersionString(Version pVersion)


    public static string GetVersionStringFromAssemblyEmbedded(string pAssemblyDisplayName)
    {
        string tVersion = "Unknown";
        System.Reflection.Assembly tMyAssembly = null;

        tMyAssembly = GetAssemblyEmbedded(pAssemblyDisplayName);
        if (tMyAssembly == null) { return tVersion; }
        tVersion = GetVersionString(tMyAssembly.GetName().Version.ToString());
        return tVersion;
    }//string GetVersionStringFromAssemblyEmbedded(string pAssemblyDisplayName)


    public static string GetVersionStringFromAssemblyDLL(string pAssemblyDisplayName)
    {
        string tVersion = "Unknown";
        System.Reflection.Assembly tMyAssembly = null;

        tMyAssembly = GetAssemblyDLL(pAssemblyDisplayName);
        if (tMyAssembly == null) { return tVersion; }
        tVersion = GetVersionString(tMyAssembly.GetName().Version.ToString());
        return tVersion;
    }//string GetVersionStringFromAssemblyEmbedded(string pAssemblyDisplayName)


답변

var versionAttrib = new AssemblyName(Assembly.GetExecutingAssembly().FullName);