.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);