हमारी दुकान में, हम क्रूज नियंत्रण & उपयोग कर रहे हैं MSBuild निरंतर एकीकरण के भाग के रूप में उत्पाद की बनाता है स्वचालित करने के लिए। निर्माण केआंतरिक प्राप्त करना दृश्यमान काम करने के लिए जब निर्माण प्रक्रिया मजबूत नामों के साथ असेंबली पर हस्ताक्षर करती है?
भाग विधानसभाओं हस्ताक्षर करने के लिए तो वे मजबूत नाम है है।
हमारी परियोजना फाइलों में जब हम स्थानीय स्तर पर विकसित करने, यह के रूप में इस MSBuild स्क्रिप्ट के द्वारा ओवरराइड की गई है, पर हस्ताक्षर निर्दिष्ट नहीं है।
यह तब तक अच्छा और अच्छा है जब तक मैंने फैसला नहीं किया कि मैं यूनिट परीक्षण शुरू करना चाहता हूं जिसके लिए मुझे InternalsVisibleTo
विशेषता का उपयोग करने की आवश्यकता है। मैंने एक अच्छी ओपन सोर्स लाइब्रेरी का उपयोग शुरू किया जिसमें यूनिट परीक्षण भी हैं जो इस तकनीक का उपयोग करते हैं।
इसका मतलब है कि, मेरे मशीन पर, मैं निम्नलिखित बयान का उपयोग करने के AssemblyInfo.cs
अद्यतन कर सकते हैं:
[assembly: InternalsVisibleTo("MyProject.Tests.UnitTests")]
और सब कुछ ठीक है।
हालांकि, टूटता में इस जाँच निर्माण के बाद से निर्माण मशीन विधानसभाओं संकेत, कि लाइन से अद्यतन किया जा करने के लिए इस के बजाय की तरह लग रहे करने की आवश्यकता होगी:
[assembly: InternalsVisibleTo("MyProject.Tests.UnitTests,
PublicKey="magic key here..)"]
मैं विधानसभाओं पर हस्ताक्षर नहीं करने के लिए आधा एक मन है और इसे एक दिन बुलाओ। हालांकि, "असेंबली पर हस्ताक्षर करना सबसे अच्छा अभ्यास है" (इस मंत्र को 3 बार दोहराएं), और अगर हमें ऐसा करने से कोई फायदा हो रहा है, तो मैं इसे रिमोट नहीं करना चाहता हूं।
हम जीएसी में स्थापित नहीं हैं, हम विशेष रूप से छेड़छाड़ के बारे में चिंतित नहीं हैं, हमारे पुस्तकालयों का उपयोग करने वाले तीसरे पक्षों के बारे में चिंता करने की ज़रूरत नहीं है, हम ऐप अपडेट करते समय हमारी सभी फाइलें एक बार अपडेट करते हैं। सबसे पहचान योग्य लाभ समर्थन में कोई व्यक्ति किसी असेंबली के कुछ यादृच्छिक संस्करण को रन-टाइम फ़ोल्डर में कॉपी नहीं कर सकता है और कुछ समय के लिए चीजें काम करने लगती हैं।
मैं हस्ताक्षर को सक्षम करने के लिए मैन्युअल रूप से 100 परियोजना फ़ाइलों को बदलने/बदलने के कार्यों को खोलना नहीं चाहता हूं। मैं भी चीजें हैं जो सार्वजनिक रूप में आंतरिक होना चाहिए चिह्नित करके चीजों को हैक नहीं करना चाहते हैं, मैं बाध्यकारी रीडायरेक्ट & मैं इकाई परीक्षण दूर करने के लिए नहीं करना चाहते हैं पाने के लिए नहीं करना चाहती।
मुझे मजबूत नाम रखने के सभी लाभों के साथ मजबूत नाम होने की आसानी नहीं है (यदि कोई है), और मैं इसे करने के लिए बहुत अधिक काम नहीं करना चाहता हूं। क्या यह पूछना बहुत बड़ी बात है?
इस पोस्ट में समस्या और एक समाधान अच्छी तरह का वर्णन करता है, लेकिन मैं एक MSBuild स्क्रिप्ट पुरुष की ज्यादा इसका लाभ उठाने के लिए नहीं कर रहा हूँ:
http://social.msdn.microsoft.com/forums/en-US/msbuild/thread/02df643c-956a-48bd-ac01-4a1016d91032/
इस समस्या का उचित समाधान क्या है?
किसी भी इनपुट और चर्चा के बिंदु स्वागत है।
धन्यवाद थॉमस, मैं इसे आजमाने के लिए जा रहा हूं और इसे काम करने के बाद इसे उत्तर के रूप में स्वीकार करूँगा। इसे हर जगह मजबूत हस्ताक्षर करने के लिए कुछ मुद्दे हैं, ज्यादातर में मुझे यकीन नहीं है कि उस परिवर्तन को कैसे स्क्रिप्ट करना है और मैं इसे मैन्युअल रूप से नहीं करना चाहता हूं। हमारी मौजूदा बिल्ड स्क्रिप्ट, जिसे किसी ऐसे व्यक्ति द्वारा लिखा गया था जो एमएसबिल्ड को हस्ताक्षर करने से बेहतर जानता है और मैं इसे बड़े बदलाव के बजाय थोड़ा सा ट्विक कर दूंगा। – Wes
मैंने इसे काम करने के लिए कभी नहीं मिला, लेकिन मैं इसे उत्तर के रूप में चिह्नित करूंगा। वह चीज जो काम नहीं करती है वह ContentGfoFiles नामक आइटम समूह है ... यह हमेशा खाली रहेगी ... कोई विचार क्यों? शामिल पैटर्न मूल रूप से आपके द्वारा पोस्ट किया गया है ... धन्यवाद! – Wes
उपरोक्त आइटम समूह यह मानता है कि विधानसभाInfo.cs फ़ाइलों को पैच में निर्माण स्क्रिप्ट के नीचे एक निर्देशिका में स्थित है; '**' वाइल्डकार्ड वर्तमान के नीचे किसी भी निर्देशिका से मेल खाता है। देखें [कैसे करें: बिल्ड करने के लिए फ़ाइलें चुनें] (http://msdn.microsoft.com/en-us/library/ms171454.aspx) MSBuild पर और जानकारी के लिए वाक्यविन्यास शामिल है। –