2011-05-12 24 views
8

के साथ एएसपी.नेट "वेब साइट" परियोजनाओं में * .dll.refresh फ़ाइलों के साथ NuGet का उपयोग करना। यदि आपके पास एएसपी.नेट वेब साइट प्रोजेक्ट प्रकार है (बिना किसी उचित .csproj या .vpproj प्रोजेक्ट फ़ाइल के बिना) यह केवल ढीली फाइलों का एक फ़ोल्डर है), फिर जब आप NuGet के साथ एक पैकेज जोड़ते हैं, तो यह मूल संकुल फ़ोल्डर में पैकेज के डीएलएल को संदर्भित करने के लिए बिन निर्देशिका में * .dll.refresh फ़ाइल बनाता है।वेब डिप्लॉयमेंट प्रोजेक्ट्स

उदाहरण के लिए, यदि आप पैकेज प्रबंधक कंसोल से "इंस्टॉल-पैकेज elmah" निष्पादित करते हैं, तो एल्मा को प्रोजेक्ट की समाधान निर्देशिका में संकुल फ़ोल्डर में रखा गया है, और फ़ाइल Elmah.dll.refresh को प्रोजेक्ट के बिन में रखा गया है फ़ोल्डर।

जब मैं स्थानीय रूप से प्रोजेक्ट का निर्माण करता हूं, तो विजुअल स्टूडियो स्वचालित रूप से रीफ्रेश फ़ाइल द्वारा संदर्भित डीएलएल में खींचता है। साइट और एल्मा सही ढंग से चलती है। मेरे पास Elmah.dll फ़ाइल नहीं है जो प्रोजेक्ट की बिन निर्देशिका में स्रोत नियंत्रण में चेक की गई है (केवल ताज़ा फ़ाइल और संकुल फ़ोल्डर चेक इन हैं)।

हालांकि, मैं साइट पर प्री-संकलन करने के लिए वेब परिनियोजन प्रोजेक्ट का उपयोग कर रहा हूं और तैनाती के लिए web.config प्रतिस्थापन करता हूं। जब समाधान इस तरह से बनाया जाता है, तो Elmah.dll स्वचालित रूप से वेब साइट प्रोजेक्ट बिन निर्देशिका में नहीं खींचा जाता है और साइट अनुपलब्ध DLL के कारण सही ढंग से नहीं चलती है।

NuGet इस तरह के परिदृश्य में कैसे उपयोग किया जाना है? क्या मुझे लगता है कि बिन निर्देशिका में Elmah.dll में जांचें?

उत्तर

8

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

+0

यह विजुअल स्टूडियो में और एमएसबिल्ड दोनों को सीधे निर्माण मशीन में चलाकर परीक्षण और काम करता है। –

0

मुझे लगता है कि प्री-संकलन .refresh फ़ाइल का उपयोग कर डीएलएल अपडेट नहीं करता है - शायद यह विजुअल स्टूडियो द्वारा किया गया है।

यदि आपको ऐसा करने का कोई तरीका नहीं मिल रहा है, तो आप एक ऐसा निर्माण चरण बना सकते हैं जो DLL को मैन्युअल रूप से बिन फ़ोल्डर में कॉपी करता है, या यदि आप DLLs की दो प्रतियों से बचने की कोशिश कर रहे हैं, तो आप जांच सकते हैं बिन फ़ोल्डर में और संकुल एक नहीं। पैकेजों को फिर से लाने के लिए आप NuGet.exe का उपयोग कर सकते हैं, संकुल फ़ोल्डर को पॉप्युलेट कर रहे हैं (here और here देखें)

4

- EDIT - ऊपर दिए गए इस समाधान का अद्यतन संस्करण देखें।

बस समाधान में कक्षा लाइब्रेरी प्रोजेक्ट जोड़ें, और अपनी वेबसाइट पर कक्षा लाइब्रेरी प्रोजेक्ट का संदर्भ जोड़ें।

फिर, कक्षा प्रोजेक्ट में नूजेट जोड़ें, न कि वेबसाइट प्रोजेक्ट।

जब आपकी वेबसाइट बनाता है, तो यह बदले में सभी वर्ग पुस्तकालयों की निर्भरताओं में खींचता है।