मुझे पता है कि मूल पोस्टर इस समस्या के लिए .NET 2.0 समाधान की तलाश में है। हालांकि, चूंकि इसे .NET के रूप में टैग नहीं किया गया था, इसलिए मैं समस्या के लिए अपने सी ++ समाधान की पेशकश करूंगा। यह .NET भूमि में लागू हो सकता है, लेकिन मैं इसे दूसरों को छोड़ दूंगा।
यह न केवल बॉक्स के बारे में संस्करण जानकारी और मेरे एप्लिकेशन के लिए लॉग फ़ाइल को अपडेट करता है, बल्कि विंडोज एक्सप्लोरर में दिखाई देने वाली सभी विंडोज़ संस्करण जानकारी भी अपडेट करता है।
अद्यतन: मेरे मूल उत्तर के बाद से मैंने कुछ बदलावों को जोड़ा है।
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION FILE_VER
PRODUCTVERSION PROD_VER
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x4L
FILETYPE 0x1L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904e4"
BEGIN
VALUE "CompanyName", "MyCompany"
VALUE "FileDescription", "Software Description"
VALUE "FileVersion", 1,0,0,1
VALUE "InternalName", "FileName.exe"
VALUE "LegalCopyright", "(c) 2008 My Company. All rights reserved."
VALUE "OriginalFilename", "FileName.exe"
VALUE "ProductName", "Product Name"
VALUE "ProductVersion", 1,0,0,1
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1252
END
END
यह अनिवार्य रूप से संस्करण जानकारी सामान है कि आप संसाधन से संपादित करेंगे के सभी परिवहन करता है:
सबसे पहले, मैं अपने Project.rc2 फाइल करने के लिए मेरी Project.rc फ़ाइल से पूरे संस्करण जानकारी ब्लॉक ले जाया गया एक अलग फ़ाइल में संपादक। इससे ऐसा होता है कि संपादक के बाहर से संसाधन फ़ाइल को संपादित करते समय आपको त्रुटियां नहीं मिलती हैं। नकारात्मकता यह है कि अब आप संसाधन संपादक से संस्करण जानकारी संपादित नहीं कर सकते हैं। लेकिन, चूंकि हम चाहते हैं कि यह सामान स्वचालित रूप से अपडेट हो जाए, यह एक बड़ा सौदा नहीं है।
अगला, मैंने एक संस्करणइन्फो बनाया।ज फ़ाइल और अपने प्रोजेक्ट के लिए यह कहा:
#pragma once
//major release version of the program, increment only when major changes are made
#define VER_MAJOR 2
//minor release version of the program, increment if any new features are added
#define VER_MINOR 0
//any bugfix updates, no new features
#define VER_REV 0
//if this is some special release (e.g. Alpha 1) put the special release string here
#define STR_SPECIAL_REL "Alpha 1"
#define FILE_VER VER_MAJOR,VER_MINOR,VER_REV
#define PROD_VER FILE_VER
//these are special macros that convert numerical version tokens into string tokens
//we can't use actual int and string types because they won't work in the RC files
#define STRINGIZE2(x) #x
#define STRINGIZE(x) STRINGIZE2(x)
#define STR_FILE_VER STRINGIZE(VER_MAJOR) "." STRINGIZE(VER_MINOR) "." STRINGIZE(VER_REV)
#define STR_PROD_VER STR_FILE_VER " " STR_SPECIAL_REL
#define STR_COPYRIGHT_INFO "©" BuildYear " Your Company. All rights reserved."
मैं तो rc2 फ़ाइल में VersionInfo.h शामिल है और निम्न परिवर्तन किए:
#include "VersionInfo.h"
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
<no changes>
VALUE "FileVersion", STR_FILE_VER
<no changes>
VALUE "LegalCopyright", STR_COPYRIGHT_INFO
<no changes>
VALUE "ProductVersion", STR_PROD_VER
<no changes>
इस स्थापना के साथ, मैं अपने निर्माण स्क्रिप्ट संपादित कर सकता है (जो पर्ल का उपयोग करता है) devenv कमांड लाइन का उपयोग कर पूरे प्रोजेक्ट को पुनर्निर्माण करने से पहले VersionInfo.h फ़ाइल में संस्करण जानकारी को संशोधित करने के लिए।
एक अतिरिक्त कदम जो मैंने जोड़ा है, वह भी ब्याज का हो सकता है (हालांकि यह अभी तक पूरी तरह से परिपूर्ण नहीं है, और यहां भविष्य का प्रश्न हो सकता है) परियोजना के निर्माण के हर बार एक अद्वितीय निर्माण संख्या उत्पन्न करना है। वर्तमान अवतार में, यह हमेशा पूर्ण पुनर्निर्माण के लिए काम करता है, लेकिन केवल वृद्धिशील बनाता है।
#define CurrentBuildNumber "20081020P1525"
अनिवार्य रूप से दिनांक और समय है कि निर्माण शुरू किया गया था है कौन सा: क्या मैंने किया था एक फ़ाइल है कि build_number.incl कहा जाता है बनाने के निम्नलिखित था। मैंने एक बैच फ़ाइल बनाई है जो इस फ़ाइल को उत्पन्न करने वाली प्रोजेक्ट में प्री-बिल्ड इवेंट के रूप में चलाया जाता है। स्क्रिप्ट BuildYear को भी परिभाषित करता है ताकि VersionInfo.h फ़ाइल में कॉपीराइट हमेशा सबसे हाल के निर्माण का वर्ष शामिल हो।
echo Generating Build Number
@For /F "tokens=2,3,4 delims=/ " %%A in ('Date /t') do @(
Set Month=%%A
Set Day=%%B
Set Year=%%C
)
@For /F "tokens=1,2,3 delims=/M: " %%A in ('Time /t') do @(
Set Hour=%%A
Set Minute=%%B
Set AmPm=%%C
)
@echo #define CurrentBuildNumber "%Year%%Month%%Day%%AmPm%%Hour%%Minute%" > "$(ProjectDir)\build_number.incl"
@echo #define BuildYear "%Year%" >> "$(ProjectDir)\build_number.incl"
echo ----------------------------------------------------------------------
इस फ़ाइल में तो परियोजना बिल्ड नंबर का उपयोग करने की जरूरत है कि किसी भी फ़ाइल में शामिल है (यानी बॉक्स के बारे में): बैच स्क्रिप्ट निम्न है।
इनमें से कुछ से this CodeProject post.
gleaned था उम्मीद है कि इस जानकारी मददगार साबित होता है।
यह किस प्रकार की परियोजना है? सी ++ या सी #/वीबी? –
प्रोजेक्ट एक सी # तैनाती प्रोजेक्ट है, मैं नेट 2.0 का उपयोग कर रहा हूं। –
पूर्ण स्रोत कोड के साथ कोई अंतिम समाधान? vdproj परियोजनाएं हैं? – Kiquenet