source

어셈블리 파일 버전을 가져오는 방법

nicesource 2023. 6. 3. 08:29
반응형

어셈블리 파일 버전을 가져오는 방법

AssemblyInfo두 가지 어셈블리 버전이 있습니다.

  1. AssemblyVersion특성을 지정할 어셈블리의 버전을 지정합니다.
  2. AssemblyFileVersion컴파일러가 Win32 파일 버전 리소스에 대해 특정 버전 번호를 사용하도록 지시합니다.Win32 파일 버전이 어셈블리의 버전 번호와 같을 필요는 없습니다.

나는 그것을 얻을 수 있습니다.Assembly Version다음과 같은 코드 행을 사용합니다.

Version version = Assembly.GetEntryAssembly().GetName().Version;

하지만 어떻게 하면 그것을 얻을 수 있습니까?Assembly File Version?

당신이 진정으로 원하는 것이 무엇인지에 대한 명확한 설명을 요청하는 위의 제 의견을 참조하십시오.바라건대 이것이 바로 그것입니다.

System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
System.Diagnostics.FileVersionInfo fvi = System.Diagnostics.FileVersionInfo.GetVersionInfo(assembly.Location);
string version = fvi.FileVersion;

어셈블리, 파일 제품의 가지 버전이 있습니다.명시적으로 지정하지 않으면 다른 기능에서 사용되며 다른 기본값을 사용합니다.

string assemblyVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString(); 
string assemblyVersion = Assembly.LoadFile("your assembly file").GetName().Version.ToString(); 
string fileVersion = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).FileVersion; 
string productVersion = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).ProductVersion;

응용 프로그램 파일 버전(어셈블리 정보 -> 파일 버전에서 설정된 내용)에 액세스하고 싶을 때, 버전을 표시하기 위해 양식 로드에서 레이블의 텍스트를 설정하라고 말하면, 방금 사용했습니다.

versionlabel.Text = "Version " + Application.ProductVersion;

접근 방식은 다음을 참조해야 합니다.System.Windows.Forms.

업데이트: 리처드 그라임스가 인용된 제 게시물인 @Iain과 @Dmitry Lobanov에서 언급했듯이, 제 대답은 이론적으로는 옳지만 실제로는 틀렸습니다.

수많은 책 등에서 기억했어야 했던 것처럼, 한 사람이 이러한 속성을 사용하여 설정하는 동안.[assembly: XXXAttribute]컴파일러에 의해 하이재킹되어 리소스에 배치됩니다.

위의 이유로, 당신은 @ Xiaofu의 대답에서 접근법을 사용해야 합니다. 왜냐하면 그것들에서 신호가 추출된 후 속성이 제거되기 때문입니다.


공용 정적 문자열 GetProductVersion(){var 특성 =(AssemblyVersionAttribute)어셈블리.조립 실행 중 가져오기().사용자 지정 특성 가져오기(유형:(AssemblyVersionAttribute), true).싱글();반환 속성.정보 버전;}

(발신인http://bytes.com/groups/net/420417-assemblyversionattribute - 거기에 언급된 것처럼, 만약 당신이 다른 속성을 찾고 있다면, 그것을 위의 것으로 대체하세요.)

사용:

((AssemblyFileVersionAttribute)Attribute.GetCustomAttribute(
    Assembly.GetExecutingAssembly(), 
    typeof(AssemblyFileVersionAttribute), false)
).Version;

또는 다음과 같습니다.

new Version(System.Windows.Forms.Application.ProductVersion);

아주 비슷한 질문에서 제 답을 교차 게시하는 것입니다. 왜냐하면 저는 제 답을 검색하다가 결국 여기에 이르렀기 때문입니다.다음 방법은 여기에 나와 있는 다른 방법과 비교하여 몇 가지 장점이 있다고 생각합니다.아래의 원답.


public static string? GetInformationalVersion() =>
    Assembly
        .GetEntryAssembly()
        ?.GetCustomAttribute<AssemblyInformationalVersionAttribute>()
        ?.InformationalVersion;

제 대답은 다른 것들과 비슷하지만 몇 가지 장점이 있다고 생각합니다.

  • 항목 어셈블리의 정보 버전을 결정합니다., 이 는 더 큰할 수 도 "더블 클릭한 수 있습니다.
    • 메인 프로그램이 을 를 대체할 수 .GetEntryAssembly()와 함께GetExecutingAssembly()
  • 파일을 보고 정보 버전을 결정하는 것이 아닙니다.I/O 작업은 불필요하고 경우에 따라 불가능합니다(단일 파일 패키징 방법, AoT 변형, UNC 경로에서 실행되는 소프트웨어 등).
  • 의 두 측면을 하지만, 저는 인 확장 방법인 @xanatos @xanatos @xanatos를 하는 것을 .GetCustomAttribute<T>더 낫고 이 변형이 더 읽기 쉽다고 생각합니다.

의 마이크로소프트 설명서도 참조하십시오.

언급URL : https://stackoverflow.com/questions/909555/how-can-i-get-the-assembly-file-version

반응형