[C#] 조립품 파일 버전을 얻는 방법

에서 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;


답변

업데이트 : 내가 인용 한 게시물 @Iain 및 @Dmitry Lobanov 에서 Richard Grimes가 언급했듯이 내 대답은 이론적으로는 맞지만 실제로는 틀립니다.

셀 수없이 많은 책들에서 기억했듯이,를 사용하여 이러한 속성을 설정하는 동안 [assembly: XXXAttribute]컴파일러에 의해 하이재킹되어 VERSIONINFO리소스에 배치됩니다 .

위의 이유로 신호가 추출 된 후 속성이 제거되므로 @Xiaofu의 답변에 접근 방식을 사용해야 합니다.


공개 정적 문자열 GetProductVersion ()
{
  var attribute = (AssemblyVersionAttribute) 어셈블리
    .GetExecutingAssembly ()
    .GetCustomAttributes (typeof (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);


답변