2012-12-06 13 views
12

मेरे AssemblyInfo अपने उत्पाद, कंपनी आदि के बारे में जानकारी .. इस डेटा वर्तमान में कठिन सीएस फ़ाइल में कोडित है:स्थानीय बनाना AssemblyInfo.cs

[assembly: AssemblyCompany("My Company.")] 
[assembly: AssemblyProduct("MyProduct")] 
[assembly: AssemblyCopyright("Copyright © 2012 My Company, Inc. All Rights Reserved.")] 
[assembly: AssemblyTrademark("MyProduct is a trademark of MyCompany Software.")] 
[assembly: AssemblyCulture("")] 

मैं इन ग्रंथों स्थानीय बनाना चाहते हैं, लेकिन मैं ऐसा करने में असमर्थ हूँ निम्नलिखित:

[assembly: AssemblyCompany(Resources.MyConpany)] 

क्या इसके आसपास कोई रास्ता है?

+3

इन्हें समय स्थिरांक संकलित करने की आवश्यकता है। मैं आमतौर पर इन तारों को स्थानीयकृत नहीं देखता हूं, या तो। – vcsjones

+1

किसी कंपनी के नाम की तरह चीजें आमतौर पर स्थानीयकृत नहीं होती हैं। माइक्रोसॉफ्ट पूरी दुनिया में माइक्रोसॉफ्ट है। –

+0

@ जोनबी: बिल्कुल सही नहीं है; कम से कम सॉफ्टवेयर दुनिया के बाहर, वास्तव में ऐसी कई कंपनियां हैं जो देश के आधार पर अपने उत्पादों के लिए अलग-अलग कंपनी के नामों का उपयोग करती हैं। हालांकि मैं सहमत हूं कि मेटाडाटा आमतौर पर उस देश में उपयोग किए जाने वाले नाम को इंगित करता है जहां सॉफ्टवेयर का उत्पादन/प्रकाशित किया गया था। –

उत्तर

3

भले ही आपके असेंबलीइन्फो को "सीधे" स्थानीयकृत करना संभव नहीं है (उदाहरण के लिए Resources.MyCompany का उपयोग अपने प्रश्न में दिखाए गए अनुसार), आप जो कर सकते हैं वह वास्तविक संकलन से पहले संकलन समय पर पूर्ण असेंबलीइन्फो उत्पन्न कर सकता है।

दोनों लिंक कैसे एक अलग MSBuild फ़ाइल है कि में यह करने के लिए दिखाई देते हैं:

यहाँ कुछ उदाहरण कैसे मुक्त & खुला स्रोत MSBuild Community Tasks के साथ ऐसा कर रहे हैं समाधान बनाने के लिए कहा जाता है, लेकिन यह सीधे .csproj फ़ाइल में रखना संभव है, जिसका अर्थ है कि AssemblyInfo.cs का निर्माण समाधान बनाने के दौरान भी काम करता है I एन विजुअल स्टूडियो।

यहां मेरी परियोजनाओं में से एक उदाहरण है कि यह कैसे करें।
(! टिप्पणी है कि मैं इस उदाहरण में पूरे AssemblyInfo.cs उत्पन्न नहीं है, लेकिन एक अलग फाइल है कि केवल संस्करण संख्या शामिल है)

MSBuild सामुदायिक कार्य फोन .csproj file में है:

<Target Name="BeforeBuild"> 
    <PropertyGroup> 
     <ProdVer>0.0</ProdVer> 
    </PropertyGroup> 
    <PropertyGroup> 
     <ProdVer Condition="'$(VersionNumber)' != ''">$(VersionNumber)</ProdVer> 
    </PropertyGroup> 
    <AssemblyInfo CodeLanguage="CS" OutputFile="AssemblyVersion.cs" AssemblyVersion="$(ProdVer)" AssemblyFileVersion="$(ProdVer)" /> 
    </Target> 

<AssemblyInfo ... लाइन AssemblyVersion.cs फ़ाइल बनाने के लिए MSBuild सामुदायिक कार्य को कॉल करती है, संस्करण संख्या $(ProdVer) पर सेट की गई है।
$(ProdVer)0.0 पर कुछ पंक्तियों से पहले सेट किया गया है, और जब $(VersionNumber) नामक एक पर्यावरण चर है, तो $(ProdVer) उस मान पर सेट है।
और $(VersionNumber) बैच फ़ाइल में बस set VersionNumber=1.1 पर कॉल करके मेरी बिल्ड स्क्रिप्ट को कॉल करने से पहले सेट किया गया है।

इसका मतलब है कि AssemblyVersion.cs वास्तविक संस्करण संख्या के साथ (मेरे उदाहरण 1.1 में) जब दृश्य स्टूडियो से निर्माण 0.0 का एक संस्करण संख्या के साथ बनाई गई है, और जब निर्माण स्क्रिप्ट के माध्यम से निर्माण।

अनुमोदित, आपकी स्थानीय कंपनी की जानकारी असेंबली में प्राप्त करने के लिए कहीं भी Resources.MyCompany पर कॉल करने की तुलना में अधिक काम है, लेकिन विधानसभा इन्फ्लोएं को वांछित करना संभव है।

8

हां, यह संभव है। विशेषताओं को मनुष्यों द्वारा बहुत ही कम पढ़ा जाता है जो भाषा की परवाह करेंगे। हालांकि वे/Win32res संकलन विकल्प का एक डिफ़ॉल्ट संस्करण उत्पन्न करने के लिए सी # कंपाइलर द्वारा भी उपयोग किए जाते हैं।

प्रॉपर्टी शॉर्टकट मेनू आइटम का उपयोग करके एक्सप्लोरर में असेंबली गुणों को देखते समय आप जो देखते हैं उसे प्रभावित करते हैं और विवरण टैब को देखते हैं। यहां विंडोज़ प्रदर्शित करता है असेंबली विशेषताओं, यह प्रबंधित असेंबली के बारे में कुछ भी नहीं जानता है। आप जो देखते हैं वह में असमर्थित में एम्बेडेड संसाधन का डेटा है।

आप देख सकते हैं कि ये अप्रबंधित संसाधन विजुअल स्टूडियो के साथ कैसा दिखते हैं। फ़ाइल + ओपन + फ़ाइल का उपयोग करें और नमूना EXE असेंबली पर नेविगेट करें। आपको एम्बेडेड संसाधनों का एक वृक्षदृश्य मिलेगा, एक सामान्य .NET प्रोग्राम में उनमें से कम से कम तीन होना चाहिए। एक आइकन, एक मैनिफेस्ट जो प्रोग्राम यूएसी संगत बनाता है। और एक संस्करण संसाधन, जिसकी आप परवाह है। उस नोड को खोलें और आप आईडी 1 के साथ संसाधन देखें, चिह्नित [तटस्थ]। तटस्थ संसाधन के किसी भी भाषा में "काम करता है" संस्करण है। संपादक को खोलने के लिए इसे डबल-क्लिक करें (एक्सप्रेस में काम नहीं करेगा), आप देख सकते हैं कि कैसे असेंबली विशेषताएँ संस्करण संसाधन गुणों के लिए मैप की गई हैं।

आपको जो करना है वह इन अप्रबंधित संसाधनों का एक संस्करण है, एक संस्करण जो एक से अधिक भाषाओं का उपयोग करता है। इसके लिए एक .rc फ़ाइल लिखने की आवश्यकता होती है, एक संसाधन स्क्रिप्ट जो तब rc.exe उपकरण, अप्रबंधित संसाधन संकलक द्वारा .res फ़ाइल में संकलित हो जाती है। इसके बाद आप इसके बारे में संकलक को बताने के लिए प्रोजेक्ट + प्रॉपर्टीज, एप्लिकेशन टैब, "रिसोर्स फाइल" रेडियो बटन का उपयोग करें।

सावधान रहें कि यह थोड़ा दर्दनाक और त्रुटि प्रवण है, rc.exe एक स्वभावपूर्ण उपकरण है और आप AssemblyInfo.cs के बीच सीधा लिंक खो देते हैं और आप विंडोज में जो देखते हैं, वह रखरखाव आइटम है। इसके बारे में जाने का सबसे अच्छा तरीका एक डमी सी ++ प्रोजेक्ट का उपयोग करना है और इसे एक साथ रखने के लिए अपने अंतर्निहित संसाधन संपादक का उपयोग करना है।

+0

दिलचस्प! मुझे लगता है कि सामान्य रूप से, जवाब शायद ही कभी "असंभव" या "नहीं किया जा सकता" है। –

संबंधित मुद्दे