2010-01-17 4 views
10

Gendarme निम्नलिखित विवरण के साथ एक AvoidAssemblyVersionMismatchRule है:क्या असेंबलीवर्सन और असेंबलीफाइलवर्सन मैच देने के अच्छे कारण हैं?

यह नियम की जाँच करता है कि [AssemblyVersion] से मेल खाता है [AssemblyFileVersion] जब दोनों एक विधानसभा के अंदर मौजूद हैं। एप्लिकेशन को तैनात करने के बाद दोनों विशेषताओं में अलग-अलग संस्करण संख्याएं भ्रमित हो सकती हैं।

उदाहरण के लिए, इस नियम माइक्रोसॉफ्ट के System.dll पर चेतावनी दी हैं जो निम्न विशेषताओं है:

[assembly: AssemblyVersion("2.0.0.0")] 
[assembly: AssemblyFileVersion("2.0.50727.3053")] 

मैं जेनदार्म के शासन से असहमत हैं। यह यह असंभव आप एक संस्करण योजना माइक्रोसॉफ्ट द्वारा प्रयोग किया जाता के समान उपयोग करने के लिए होगा के बाद, कि हर निर्माण पर

  • अद्यतन AssemblyFileVersion, केवल सार्वजनिक इंटरफ़ेस या अन्यथा बड़े बदलाव पर
  • परिवर्तन AssemblyVersion,
  • है
  • सुनिश्चित करें AssemblyVersion और AssemblyFileVersion शेयर एक आम उपसर्ग,

और मुझे लगता है कि इस संस्करण योजना डिजाइन कारण है कि यह करने के लिए संभव हो सका है पहली जगह AssemblyVersion और AssemblyFileVersion के बीच अंतर करें।

मैं एक कारण के साथ नहीं आ सकता कि क्यों दोनों असेंबली गुण बराबर होना एक अच्छा अभ्यास है, लेकिन शायद आप कर सकते हैं! मुझे आपकी राय में दिलचस्पी होगी।

वास्तव में कोई अच्छा कारण है, तो मैं जल्द ही जेनदार्म डेवलपर्स का सुझाव

यह नियम के नियम बदलने के लिए होगा की जाँच करता है कि [AssemblyVersion] और [AssemblyFileVersion]एक आम, गैर खाली उपसर्ग जब दोनों एक असेंबली के अंदर मौजूद हैं।

+1

राय == समुदाय विकी –

उत्तर

9

सहमत हैं, अगर उन्हें मेल खाना चाहिए तो शुरुआत के साथ दो अलग-अलग विशेषताओं की आवश्यकता नहीं होगी! लेकिन जैसा कि नियम कहता है: यह भ्रमित हो सकता है।

असेंबली वर्जन "आपके पूरे एप्लिकेशन का संस्करण" जैसा है जबकि फ़ाइलवर्सन एक व्यक्तिगत फ़ाइल का संस्करण है। यदि आपके एप्लिकेशन में कई असेंबली हैं जिनके पास किसी भी कारण से अलग-अलग अपडेट चक्र हैं (उदा। प्लगइन्स जिन्हें अलग से अपडेट किया गया है लेकिन इसके लिए मुख्य एप्लिकेशन की विशिष्ट प्रमुख रिलीज की आवश्यकता होती है), तो आप प्रत्येक को एक अलग फ़ाइलवर्सन दे सकते हैं लेकिन एक आम असेंबली वर्जन हो सकता है।

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

+1

मैं इस राय को दूसरा करता हूं - फ़ाइल संस्करण कई बिल्डों में अत्यधिक मूल्यवान है, लेकिन सार्वजनिक रिलीज के बीच। आम तौर पर आप कभी भी सार्वजनिक रिलीज के बीच असेंबली संस्करण को कभी भी नहीं बदलेंगे, लेकिन दिन-प्रतिदिन, आपका परीक्षण विभाग यह निर्धारित करने का एक उदाहरण है कि एक विशेष डीएलएल क्या बनाता है ... वर्णनात्मक लॉग इन करने में सक्षम होने के लिए इस मामले में रिपोर्ट जारी करें। क्योंकि (आदर्श) इन सभी बिल्ड (एक रिलीज के लिए तैयार) एक ही असेंबली संस्करण साझा करते हैं, तो फ़ाइल संस्करण उन्हें अलग करने के लिए सही उपकरण है। – Adam

4

सहमत हैं, यह एक मूर्ख नियम है। जब आप इसका पालन करते हैं तो आप मजबूत नामांकित असेंबली के लिए ड्रॉप-इन बग फिक्स अपडेट को तैनात नहीं कर सके। अन्यथा कुछ कारण हैं जो उन्हें समान नहीं बनाते हैं यदि आपको वास्तव में [असेंबलीवर्सन] को बदलना है। हो सकता है कि जब आप बग ठीक करते हैं तो आपको उस उपकरण का उपयोग नहीं करना चाहिए। विडंबना।

0

मुझे लगता है कि नियम कई परिदृश्यों में समझ में आता है, क्योंकि .NET Framework अनिवार्य रूप से एक ही विधानसभा के साथ दो विधानसभाओं को एक दूसरे के रूप में मानता है।

तो, उदाहरण के लिए, डाउनलोड कैश में एक पुराना संस्करण स्वचालित रूप से असेंबलीफाइलवर्सन में भिन्न नए संस्करण द्वारा ओवरराइट नहीं किया जाएगा।

यह औसत डेवलपर, इसलिए नियम के लिए भ्रमित हो सकता है।

बेशक, यदि आप जानते हैं कि आप क्या कर रहे हैं और व्यापार-बंद समझते हैं, तो आप नियम को अनदेखा कर सकते हैं।

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