2012-11-23 18 views
6

क्या वेब.कॉन्फिग या ऐप.कॉन्फिग में दृढ़ता से टाइप किए गए संदर्भ बनाना संभव है ताकि बिल्ड को तोड़ दिया जाएगा जब उन प्रकार के संदर्भ परियोजना में जोड़े नहीं गए हैं?क्या दृढ़ता से टाइप किए गए web.config संदर्भ बनाना संभव है?

उदाहरण के लिए, मेरे पास एक व्हिजबेंजरफ़ैक्टरी है जो घोषित WhizzBangers के लिए web.config में दिखता है। मैं विन्यास की तरह,

<whizBangs> 
<add name="SuperDooper" type="MyProject.WhizzBangers.SuperDooperWhizzBanger, MyProject.WhizzBangers" /> 
<add name="Fantastical" type="AnotherProject.WhizzBangers.FantasticalWhizzBanger, AnotherProject.WhizzBangers" /> 
</whizBangs> 

यह बिल्कुल ठीक है, भले ही वहाँ MyProject.WhizzBangers andAnotherProject.WhizzBangers करने के लिए कोई संदर्भ हैं संकलन होगा हो सकता है। मैं जो चाहूंगा वह असफल होने के लिए है और मुझे सूचित करें कि मैंने संदर्भों को याद किया है।

+0

मुझे आश्चर्य है कि यह Resharper जैसे उपकरणों के साथ हासिल किया जा सकता है? – Mike

+0

एक निष्पादन योग्य बनाएं जो आपकी .config फ़ाइल या किसी अन्य तरीके से पार्स करके आपको जो चाहिए उसे जांचता है। प्री-बिल्ड इवेंट से इस निष्पादन योग्य को कॉल करें। –

उत्तर

1

रिशेर्पर इससे आपकी सहायता कर सकता है।

यह नेत्रहीन एक web.config जहां प्रकार संदर्भित नहीं है में चीजों को अलग (या आप कोई गलती की है - इस उदाहरण में मैं एक "टी" "माइक्रोसॉफ्ट" के अंत दूर ले गया)

enter image description here

हालांकि, यह अभी भी संकलन करने में विफल नहीं है, जो शर्म की बात है। यह होना चाहिए!

+0

लेकिन यह बिंदु र्यू तेज का उपयोग स्वचालित निर्माण –

3

वेब.कॉन्फिग रनटाइम केवल संकल्प है। सफलता या विफलता के निर्माण के लिए देर हो चुकी है।

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

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

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

+0

में असफल होने के लिए नहीं किया जा सकता है धन्यवाद, यह समझ में आता है - क्योंकि राफा का सुझाव है कि शायद बेहतर विचार यह है कि समस्या को हल करने के लिए वेब.कॉन्फिग का उपयोग न करें और अन्य समाधान जैसे कि आईओसी। –

2

दो अंक विफल रहता है:

Firsly, कैसे अपनी परियोजना संकलित करता है, भले ही संदर्भ याद कर रहे हैं? इसका तात्पर्य है कि आपको वास्तव में उनकी आवश्यकता नहीं है! आपको जिस चीज की आवश्यकता नहीं है उसके लिए दृढ़ता से टाइप किया गया संदर्भ कैसे हो सकता है? जब आप अनावश्यक संदर्भ से चूक गए हैं तो आप चेतावनी देने के लिए कह रहे हैं?

दूसरे,

मैं अभी भी वास्तव में क्या आप क्या करना चाहते पर स्पष्ट नहीं कर रहा हूँ, लेकिन मुझे लगता है कि आप क्या चाहते हैं एक पूर्व निर्माण कदम बनाने के द्वारा प्राप्त किया जा सकता। Web.config फ़ाइल की प्रसंस्करण और जांच करने के लिए आपको थोड़ा सी # कंसोल प्रोग्राम लिखना पड़ सकता है।

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

Properties.Resources.MyTestResource 

दिलचस्प बात यह है उत्पन्न कोड के अंदर उल्लेख कर सकते हैं, के साथ सीएस फ़ाइल इस टिप्पणी

/// <summary> 
/// A strongly-typed resource class, for looking up localized strings, etc. 
/// </summary> 
// This class was auto-generated by the StronglyTypedResourceBuilder 
// class via a tool like ResGen or Visual Studio. 
// To add or remove a member, edit your .ResX file then rerun ResGen 
// with the /str option, or rebuild your VS project. 

ऐसा लगता है कि आप इसी तरह कुछ करने के लिए सक्षम हो सकता है लगता है है आपकी प्रोजेक्ट में, संभवतः एक प्री-बिल्ड चरण जोड़कर जो आपके लिए कक्षा उत्पन्न करता है?

StronglyTypedResourceBuilder वर्ग एक संदर्भ पृष्ठ यहाँ है:

http://msdn.microsoft.com/en-us/library/system.resources.tools.stronglytypedresourcebuilder.aspx

उपयोग करने के लिए यथोचित आसान लग रहा है। यह आपके परिदृश्य में लागू नहीं हो सकता है, हालांकि, मैं इसे सिर्फ एक उदाहरण के रूप में उपयोग कर रहा हूं। ऐसा लगता है कि आप प्रॉक्सी प्रकार या कुछ उत्पन्न करना चाहते हैं ...

1

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

http://www.ninject.org/

+0

मुझे लगता है कि यह सबसे अच्छा विचार हो सकता है, मुझे लगता है कि यदि गायब प्रकारों के लिए web.config से संकलन समय त्रुटियों को प्राप्त करना संभव नहीं है तो एक अलग समाधान समझ जाएगा। –

0

पर क्या फिलिप डेनियल ने कहा कि आधार पर, आप एक के बाद निर्माण कदम की जरूरत हो सकती।

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

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

0

या तो एक new Task implementation बनाने, या Inline Task, जो आपके web.config से वर्ग के नाम से पार्स करके Assembly.Load का उपयोग कर उन्हें लोड करने के लिए प्रयास करता है का उपयोग करके द्वारा एक MSBuild कदम बनाओ। अगर लोडिंग विफल हो जाती है तो यह एक अपवाद फेंक देगा जो आपके निर्माण को विफल कर देगा।

0

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

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

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

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