2015-11-03 9 views
12

हमारे पास Asp.net MVC5 में विकसित एक बड़ी परियोजना है। हमारे मॉडल और व्यापार तर्क अलग वर्ग पुस्तकालयों में परिभाषित हैं। अब हमें एक मौजूदा प्रोजेक्ट में एक और मॉड्यूल जोड़ने की जरूरत है, लेकिन हम एक अलग डीएल चाहते हैं।क्या एमवीसी परियोजना के साथ अलग-अलग डीएल बनाना संभव है?

यह मॉड्यूल सबसे अधिक जावास्क्रिप्ट, सीएसएस फ़ाइलें और अन्य फ़ाइलों को भी साझा करता है। यही कारण है कि हम एमवीसी परियोजना को अलग नहीं करना चाहते हैं।

क्या कोई ऐसा है कि हम मॉड्यूल के आधार पर अलग-अलग डीएल बना सकते हैं। इसलिए हम अन्य डीएलएस को तैनात या स्पर्श नहीं करना चाहते हैं।

+0

हां, आप जितनी चाहें उतनी असेंबली प्राप्त कर सकते हैं। – Matthew

उत्तर

1

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

संपादित करें: मैं तुम्हें दृश्य स्टूडियो का उपयोग कर रहे हैं, यदि हां, तो आप फाइल पर जा सकते हैं यह सोचते कर रहा हूँ -> प्रोजेक्ट बनाएं, इस एक अन्य परियोजना में पैदा करेगा वही समाधान

6

आपके विवरण से, आप कहते हैं कि परियोजनाएं सीएसएस और जेएस फाइलें साझा करती हैं। इससे मुझे विश्वास होता है कि आप एक अलग एमवीसी वेबसाइट (संभावित रूप से बड़ी कॉर्पोरेट वेबसाइट का हिस्सा) के बारे में बात कर रहे हैं। यह क्षेत्र के उपयोग के साथ सबसे आसान हो सकता है। यदि आप क्षेत्र से परिचित नहीं हैं, तो कृपया निम्नलिखित पढ़ें: https://msdn.microsoft.com/en-us/library/ee671793(VS.100).aspx

बेशक क्षेत्र का उपयोग करने के लिए आपको क्षेत्र में से प्रत्येक बार परिवर्तन करने की आवश्यकता होगी, और आपने उल्लेख किया है कि आप ऐसा करने से बचना चाहते हैं।

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

How do you share scripts among multiple projects in one solution?

0

मैं अपनी मल्टी-मॉड्यूल परियोजना को व्यवस्थित करने के दो तरीके सुझाने कर सकते हैं:

अधिक जानकारी के लिए निम्नलिखित पढ़ें।

विकल्प 1 - बनाएँ मॉड्यूल प्रति क्षेत्र, एक ही वेब परियोजना के भीतर

एक तरह से यह करने के लिए एक ही MVC परियोजना के भीतर अलग Area बनाने के लिए, है। इसलिए अलग-अलग नियंत्रकों, विचारों, स्क्रिप्ट इत्यादि के साथ प्रत्येक मॉड्यूल में एक अलग क्षेत्र होगा।लेकिन,
(1) यह अभी भी पूरे एमवीसी प्रोजेक्ट
(2) के लिए एक क्षेत्र dll बना देगा (2) कुछ परिस्थितियों में फ़ाइलों को साझा करना बहुत आसान नहीं हो सकता है (आप सभी मॉड्यूल के लिए सभी स्क्रिप्ट्स को साझा कर सकते हैं निर्देशिका हालांकि)

विकल्प 2 - मॉड्यूल प्रति वर्ग पुस्तकालय बनाएँ, मर्ज निर्माण के बाद

एक और तरीका है मॉड्यूल प्रति एक भी class library प्रोजेक्ट बनाने के लिए है। System.Web.Mvc और अन्य पुस्तकालयों के संदर्भ में जोड़ें ताकि controllers आदि हो। अपने स्वयं के विचार, स्क्रिप्ट और अन्य फ़ोल्डर्स बनाएं और फ़ाइलों की आवश्यकता के साथ पॉप्युलेट करें।

अब, अपने सभी मॉड्यूल dll फ़ाइल के साथ के रूप में अलग परियोजनाओं, और javasvript रों, html रों, css रों, छवियों आदि का निर्माण करेगा उन्हें एक ही web application के रूप में सभी काम करने के लिए आप एक (केवल एक) बना सकते हैं MVC वेब प्रोजेक्ट, जो आईआईएस आभासी निर्देशिका में जाएगा और वेब के रूप में प्रकाशित किया जाएगा।

उसी वेब से अपने सभी अलग-अलग मॉड्यूल का उपयोग करने के लिए, आप उन सभी पुस्तकालयों में post build ईवेंट लिख सकते हैं ताकि वे कलाकृतियों (डीएलएल, स्क्रिप्ट इत्यादि) को मुख्य वेब में कॉपी कर सकें, संबंधित फ़ोल्डरों में (डीएल से \ bin, जावास्क्रिप्ट \ स्क्रिप्ट आदि के लिए)। इसलिए, सफल निर्माण के बाद, सभी कलाकृतियों एक ही वेब प्रोजेक्ट में उपलब्ध हैं, और इसे सभी मॉड्यूल के साथ एक ही वेब के रूप में तैनात किया जा सकता है। आपकी पोस्ट का निर्माण स्क्रिप्ट इस

XCOPY "$(ProjectDir)$(OutDir)*.*" "$(ProjectDir)..\YourMainWebDirectory\Bin\" /Y 
XCOPY "$(ProjectDir)Content" "$(ProjectDir)..\YourMainWebDirectory\Content\" /S /Y 
XCOPY "$(ProjectDir)Scripts" "$(ProjectDir)..\YourMainWebDirectory\Scripts\" /S /Y 
XCOPY "$(ProjectDir)Views" "$(ProjectDir)..\YourMainWebDirectory\Views\" /S /Y 
XCOPY "$(ProjectDir)Images" "$(ProjectDir)..\YourMainWebDirectory\Images\" /S /Y 

अब कुछ ऐसा दिखाई देगा,
(1) आप अलग मॉड्यूल के लिए अलग से DLLs है
(2) सीधे, स्क्रिप्ट और अन्य फ़ाइलों को साझा कर सकते हैं के रूप में वे एक ही स्थान में हो जाएगा (निर्माण के बाद)
(3) यदि आप वेब से एक विशिष्ट मॉड्यूल को हटाने का निर्णय लेते हैं, तो बस उस मॉड्यूल (प्रोजेक्ट) से पोस्ट बिल्ड इवेंट को किसी अन्य चीज़ को प्रभावित किए बिना हटा दें। आप इसे किसी भी समय कृपया वापस जोड़ सकते हैं।

आपका कुल solution तरह

Module01.csproj => post build copy to main 
    \Controllers 
    \Scripts 
    \Views 
    \Contents 
    \Images 

Module02.csproj => post build copy to main 
    \Controllers 
    \Scripts 
    \Views 
    \Contents 
    \Images 

Models.csproj 
    \... 

Application.csproj 
    \... 

Main.Web.csproj => main web application hosted in IIS 
    \Controllers 
    \Scripts 
    \Views 
    \Contents 
    \Images 
0

अन्य लोगों को दिखेगा पोस्ट किया है क्षेत्रों के उपयोग के संबंध जवाब। क्षेत्र महान और अच्छे और सहायक हैं। वे वास्तव में परियोजना संरचना का लाभ उठाते हैं।

इस मॉड्यूल भी सबसे javascripts, सीएसएस फ़ाइलें और अन्य फ़ाइल

अपने प्रश्न का शीर्षक .dlls के बारे में है के शेयरों, लेकिन मुझे लगता है क्लाइंट साइड संसाधनों मुख्य चिंता का विषय हैं।

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

फ्रंट-एंड पैकेज प्रबंधन विकल्प एएसपी.NET 5 के लिए विस्तारित हुए हैं। परंपरागत NuGet पैकेज प्रबंधक के अतिरिक्त, बोवर और एनपीएम अब समर्थित हैं। उदाहरण के लिए, this article demonstrates installing jQuery via NPM पर विचार करें। setting up NPM, Bower, and Gulp in Visual Studio के बारे में एक और अच्छा लेख यहां दिया गया है।

क्या करें: अपना मौजूदा क्लाइंट-साइड कोड लें और एक कस्टम एनपीएम या बॉवर पैकेज बनाएं, और उसके बाद उस पैकेज का उपयोग एक या अधिक Asp.NET प्रोजेक्ट से करें।

1

मैं के रूप में आप की आवश्यकता पता नहीं है कि क्या आप Managed Extensibility Framework (MEF) या नहीं .. यह framework काम करता है के साथ की कोशिश की ... मैं लिंक नीचे लगता है कि आप में मदद मिलेगी और अधिक

ASP.NET MVC Extensibility with MEF

How to integrate MEF with ASP.NET MVC 4 and ASP.NET Web API

http://www.codeproject.com/Articles/167321/MEF-with-ASP-NET-Hello-World

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