भले ही आपके असेंबलीइन्फो को "सीधे" स्थानीयकृत करना संभव नहीं है (उदाहरण के लिए 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
पर कॉल करने की तुलना में अधिक काम है, लेकिन विधानसभा इन्फ्लोएं को वांछित करना संभव है।
स्रोत
2012-12-06 22:12:17
इन्हें समय स्थिरांक संकलित करने की आवश्यकता है। मैं आमतौर पर इन तारों को स्थानीयकृत नहीं देखता हूं, या तो। – vcsjones
किसी कंपनी के नाम की तरह चीजें आमतौर पर स्थानीयकृत नहीं होती हैं। माइक्रोसॉफ्ट पूरी दुनिया में माइक्रोसॉफ्ट है। –
@ जोनबी: बिल्कुल सही नहीं है; कम से कम सॉफ्टवेयर दुनिया के बाहर, वास्तव में ऐसी कई कंपनियां हैं जो देश के आधार पर अपने उत्पादों के लिए अलग-अलग कंपनी के नामों का उपयोग करती हैं। हालांकि मैं सहमत हूं कि मेटाडाटा आमतौर पर उस देश में उपयोग किए जाने वाले नाम को इंगित करता है जहां सॉफ्टवेयर का उत्पादन/प्रकाशित किया गया था। –