Yusefnejad

یوسف نژاد

Yusefnejad

یوسف نژاد

هنگامیکه یه فایل PE برای یه اسمبلی تولید میشه (چه توسط csc.exe و چه بوسیله al.exe)، اطلاعات استانداردی برای نگهداری نسخه کامل اسمبلی هم به اون فایل اضافه میشه. این استاندارد مطابق استاندارد نسخه Win32 هستش. برای آشنایی بیشتر با ساختار داده ای این منبع تو یه فایل استاندارد ویندوزی میشه از اینجا کمک گرفت.


نکته: اطلاعات نسخه (Version Information) علاوه بر شماره نسخه یا ورژن یه فایل، داده های دیگه ای رو هم شامل میشه که در ادامه با اونا آشنا میشیم.

برای مشاهده خلاصه ای از این داده ها میشه از پنجره پراپرتی های فایل کمک گرفت. تو ویندوز ویستا به بعد، این داده ها تو تب Details نشون داده میشه. مثلا پنجره پراپرتی های فایل PE مثال مطلب قبلی (p.exe) تو تصویر زیر نشون داده شده:

البته با توجه به اینکه این اطلاعات صراحتا تو زمان کامپایل فراهم نشده، کامپایلر از مقادیری پیش فرض استفاده کرده.


FileVersionInfo

برای دسترسی به این اطلاعات با برنامه نویسی و تو زمان اجرا، میشه از متد استاتیک GetVersionInfo کلاس FileVersionInfo استفاده کرد. این کلاس تو فضای نام System.Diagnostics قرار داره. این متد نشانی یه فایل رو بصورت یه رشته دریافت کرده و به عنوان نتیجه یه نمونه از کلاس FileVersionInfo برمیگردونه. پراپرتی های این کلاس به شرح زیره:

نام شرح
Comments کامنتهای مرتبط با فایل
CompanyName نام شرکتی که فایل رو تولید کرده
FileBuildPart شماره بیلد (تولید) فایل
FileDescription شرح فایل
FileMajorPart قسمت اصلی شماره نسخه فایل
FileMinorPart قسمت فرعی شماره نسخه فایل
FileName نام فایل
FilePrivatePart عدد قسمت خصوصی فایل
FileVersion شماره کامل نسخه فایل
InternalName نام درونی فایل در صورت وجود
IsDebug آیا فایل برای حالت دیباگ تولید شده؟
IsPatched آیا فایل پس از تولید دچار تغییر شده؟
IsPreRelease آیا فایل برای ارائه نهایی محصول تولید شده؟
IsPrivateBuild آیا فایل با فرایند استاندارد ریلیز محصول تولید شده؟
IsSpecialBuild آیا فایل با یه بیلد خاص تولید شده؟
Language زبان تنظیم شده تو اطلاعات نسخه فایل
LegalCopyright اطلاعات کپی رایت فراهم شده برای فایل
LegalTrademarks اطلاعات نام تجاری و سایر موارد مرتبط فراهم شده برای فایل
OriginalFilename نام اصلی فایل که با اون تولید شده
PrivateBuild اطلاعات مرتبط با یه نسخه خصوصی از فایل
ProductBuildPart شماره بیلد محصولی که این فایل برای اون تولید شده
ProductMajorPart شماره اصلی نسخه محصولی که این فایل برای اون تولید شده
ProductMinorPart شماره فرعی نسخه محصولی که این فایل برای اون تولید شده
ProductName نام محصولی که این فایل برای اون تولید شده
ProductPrivatePart شماره بخش خصوصی محصول مربوطه
ProductVersion شماره کامل نسخه محصول مربوطه
SpecialBuild اطلاعات بیلد ویژه فایل

برای دریافت اطلاعات بیشتر درباره هریک از این پراپرتی ها به لینک مربوطه مراجعه کنین.


Attributeهای سطح اسمبلی

برای مقداردهی این پراپرتی ها برای هر اسمبلی میشه از attributeهای سطح اسمبلی موجود استفاده کرد. برای مثال بصورت زیر:

using System.Reflection;

// FileDescription version information:
[assembly: AssemblyTitle("عنوان اسمبلی")]
// Comments version information:
[assembly: AssemblyDescription("شرح عملکرد اسمبلی")]
// CompanyName version information:
[assembly: AssemblyCompany("شرکت یوسف نژاد")]
// ProductName version information:
[assembly: AssemblyProduct("محصول شرکت یوسف نژاد")]
// LegalCopyright version information:
[assembly: AssemblyCopyright("Copyright (c) 2013")]
// LegalTrademarks version information:
[assembly: AssemblyTrademark("trademark of Yusefnejad")]
// AssemblyVersion version information:
[assembly: AssemblyVersion("1.0.5.0")]
// FILEVERSION/FileVersion version information:
[assembly: AssemblyFileVersion("1.0.5.67")]
// PRODUCTVERSION/ProductVersion version information:
[assembly: AssemblyInformationalVersion("1.0.5.0")]
// Set the Language field (discussed later in the "Culture" section)
[assembly: AssemblyCulture("")]

نکته ای که برای استفاده از این attributeهای سطح اسمبلی باید درنظر گرفت اینه که خطوط کد بالا باید تو بیرون فضای کلاسها بکار بره. برای آشنایی بیشتر با این attributeها به اینجا یه سری بزنین.


مشاهده داده های نسخه اسمبلی

با استفاده از کدهای ارائه شده تو قسمت قبل تو یه اسمبلی و کامپایل اون، فایلی تولید میشه که پنجره پراپرتی اون بصورت زیره:

متاسفانه ویندوز اکسپلورر بیشتر این داده ها را نشون نمیده، بنابراین برای دیدن این اطلاعات باید از روشهای دیگه ای استفاده کرد. مثلا با استفاده از PowerShell میشه اطلاعات بیشتری رو بدست آورد. تو این روش از دستور زیر استفاده میشه:

(Get-Item d:\app.exe).VersionInfo | fl *

نتیجه اجرای این دستور تو پنجره PowerShell به اینصورته:

میبینید که تمامی اطلاعات نسخه فایل با این روش بدست میاد. یادگیری PowerShell ویندوز رو میتونین از اینجا شروع کنین.


نسخه اسمبلی و AL.exe

با استفاده از سوییچهای خط فرمان ابزار AL.exe هم میشه این اطلاعات رو تنظیم کرد. دقت کنین که متاسفانه کامپایلر #C چنین امکاناتی رو فراهم نمیکنه و تو این حالت تنها با استفاده از همون Attributeهای گلوبال میشه این مقادیر رو وارد کرد. برای آشنایی بیشتر با این سوییچها و مقادیر متناظرش تو منابع نسخه یه فایل تو ویندوز جدول زیر ارائه میشه:

منبع نسخه سوییچ AL.exe توضیحات
FILEVERSION fileversion/ System.Reflection.AssemblyFileVersionAttribute
PRODUCTVERSION productversion/ System.Reflection.AssemblyInformationalVersionAttribute
FILEFLAGSMASK (none) همیشه به  VS_FFI_FILEFLAGSMASK مقداردهی میشه (تعریف شده توفایل WinVer.h با مقدار 0x0000003F)
FILEFLAGS (none) همیشه برابر با 0
FILEOS (none) درحال حاضر همیشه برابر با VOS__WINDOWS32
FILETYPE target/ مقداردهی به VFT_APP اگر target:exe/ یا target:winexe/ فراهم شده باشه، مقداردهی به VFT_DLL اگر target:library/ فراهم شده باشه.
FILESUBTYPE (none) همیشه به VFT2_UNKNOWN مقداردهی میشه. (این فیلد برای VFT_APP و VFT_DLL هیچ مفهومی نداره.)
AssemblyVersion version/ System.Reflection.AssemblyVersionAttribute
Comments description/ System.Reflection.AssemblyDescriptionAttribute
CompanyName company/ System.Reflection.AssemblyCompanyAttribute
FileDescription title/ System.Reflection.AssemblyTitleAttribute
FileVersion version/ System.Reflection.AssemblyFileVersionAttribute
InternalName out/ به نام فایل خروجی بدون پسوند مقداردهی میشه
LegalCopyright copyright/ System.Reflection.AssemblyCopyrightAttribute
LegalTrademarks trademark/ System.Reflection.AssemblyTrademarkAttribute
OriginalFilename out/ به نام فایل خروجی بدون مسیر مقداردهی میشه
PrivateBuild (none) همیشه خالی
ProductName product/ System.Reflection.AssemblyProductAttribute
ProductVersion productversion/ System.Reflection.AssemblyInformationalVersionAttribute
SpecialBuild (none) همیشه خالی


در ادامه درباره داده های نسخه اسمبلی بیشتر بحث میشه.


.:  :.

  • یوسف نژاد

VersionInfo

Version

Assembly

NET Framework.

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی
آخرین نظرات