2010-12-02 6 views
20

मैं दो परियोजनाओं के बीच एक डीएलएल के बिना कोड साझाकरण कैसे कर सकता हूं?एक परियोजना के बिना 2 परियोजनाओं के बीच कोड साझा करना

समस्या यह है: मेरे पास एक ऐसा उपकरण है जो उपयोगकर्ताओं को & एलडीएपी से डेटाबेस में समन्वयित करता है।

अब उपकरण एक विंडोज़ सेवा है, लेकिन इसका परीक्षण करना बहुत कठिन और समय लेने वाला है।

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

लेकिन ... सामान्य फ़ाइलों को सिंक में रखना एक समस्या है। मैं करते हैं, एक dll बनाने के लिए नहीं चाहता है कि यह शायद 3 परियोजना, एक Windows इंस्टालर (सेवा के लिए) है, जहां मैं ExecutingAssembly पथ का उपयोग करने के लिए है के साथ एक समस्या मुझे बनाता है क्योंकि ...

वहाँ एक रास्ता है अलग डीएल बनाने के बिना कोड साझा करने के लिए? ऑटोमैजिक स्थिर लिंकिंग, तो कहने के लिए?

+0

विस्टा और नए सिम्लिंक पर उपयोगी हो सकता है। – CodesInChaos

+0

@CodeInChaos, स्रोत नियंत्रण/बैकअप में सिम्लिंक को आसानी से स्टोर करने का कोई तरीका नहीं है - आप दोनों ही कर रहे हैं, है ना? =) – Rob

+0

http://stackoverflow.com/questions/954560/what-does-git-do-to-files-that-are-a-symbolic-link सिम-लिंक के रूप में गिट स्टोर्स sym-link की तरह लगता है। कोई विचार नहीं है कि यह विंडोज़ पर काम करता है, हालांकि मैं अभी तक विस्टा का उपयोग नहीं करता हूं। और उपयोग-मामले के आधार पर यह अनदेखा-फ़ाइल में sym-link जोड़ने और प्रत्येक कोडर के लिए इसे मैन्युअल रूप से बनाने के लिए पर्याप्त हो सकता है। थोड़ा सा हैश, लेकिन काम करना चाहिए। – CodesInChaos

उत्तर

29

How about adding a file as a link.

दृश्य स्टूडियो में सही अपने कंसोल परीक्षण ऐप परियोजना पर क्लिक करें -> का चयन जोड़ने के मौजूदा फ़ाइल> का चयन करें जिन फ़ाइलों को आप साझा करना चाहते हैं -> और जोड़ें बटन पर लिंक विकल्प के रूप में जोड़ें का चयन करें।

+2

Add बटन पर उस चुस्त ड्रॉपडाउन त्रिकोण को स्थानांतरित करना काफी मुश्किल है! यदि आप एक साझा लाइब्रेरी चाहते हैं तो एक ही लाइब्रेरी के साथ एंड्रॉइड और विंडोज के लिए एक ही कोड के साथ बहुत उपयोगी है, लेकिन विभिन्न परियोजना रैपर। – AndyM

+0

क्या आप इसे यहां देख सकते हैं http://stackoverflow.com/questions/21301360/share-properties-from-child-app-to-base-project – Goofy

2

प्रोजेक्ट फ़ाइलों को उसी स्रोत फ़ाइल को इंगित करने के लिए कैसे करें?

एक और विकल्प - दोनों परियोजनाओं को एक ही फ़ोल्डर में रखें। एक वर्ग को एक में जोड़ें, फिर अन्य प्रोजेक्ट में मौजूदा कक्षा जोड़ें और क्लास को अभी बनाया गया क्लाइंट को इंगित करें।

2

आप किए जा सकेंगे:

  • एक अलग परियोजना है कि एक DLL का उत्पादन में साझा कोड को बनाए रखने के लिए और फिर एक विधानसभा में DLL & EXE चालू करने के लिए इस तरह के ILMerge के रूप में एक उपकरण का उपयोग।
  • कई परियोजनाओं के बीच स्रोत-फ़ाइलों को साझा करें, या तो अपनी प्रोजेक्ट फ़ाइलों को tweakiing या अपने स्रोत-पेड़ लेआउट के साथ कुछ मज़ाकिया कर।

सभी ने कहा कि सबसे अच्छा तरीका बुलेट काटने और साझा कोड को साझा असेंबली (डीएलएल) में स्टोर करना होगा। जब आप निर्णय लेते हैं तो क्या होता है, उदाहरण के लिए, इस कोड को डब्ल्यूसीएफ सेवा के माध्यम से बेनकाब करें? यह अधिक जटिल हो रहा है क्योंकि आपके पास 3 स्थान हैं जो समान कोड फ़ाइलों का संदर्भ देते हैं। इस बारे में न सोचें कि अब आपके जीवन को सबसे आसान बनाता है, इस बारे में सोचें कि भविष्य में भी आपका जीवन क्या होगा (और किसी और के लिए जो कोड को बनाए रखना है)! > फ़ाइल में अपने वास्तविक खिड़कियों सेवा परियोजना में फाइल करने के लिए संवाद नेविगेट जोड़ने - - =)

+0

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

+0

बेशक आप पोस्ट-बिल्ड इवेंट में ILmerge को स्वचालित कर सकते हैं, इसे कमांड लाइन –

+0

@StefanSteiger से निष्पादित कर सकते हैं आप महसूस करते हैं कि रन बटन दबाकर = चलाएं और चलाएं, है ना? यदि कोई बकाया परिवर्तन है, तो यह प्रोजेक्ट और किसी भी निर्भर परियोजना को उसी समाधान में चलाने से पहले पुन: संकलित करेगा। – Dan

9

आप किसी प्रोजेक्ट में एक लिंक के रूप में एक फ़ाइल जोड़ सकते हैं। मौजूदा आइटम संवाद जोड़ें पर जोड़ें बटन के दाईं ओर एक ड्रॉप डाउन है। "लिंक के रूप में जोड़ें" का चयन करने के लिए इस का उपयोग करें:

alt text

एक समाधान आइटम के रूप में फ़ाइल रखो और प्रत्येक परियोजना के लिए एक कड़ी के रूप में जोड़ें।

0

यदि आप कार्यक्षमता साझा करना चाहते हैं, तो आपको एक डीएलएल या इसी तरह का उपयोग करना चाहिए।

जो आप साझा करना चाहते हैं वह स्रोत है, जो आप अनिवार्य रूप से साझा कर रहे हैं वह फ़ाइल साझा करना है। तो आप अपनी परियोजनाओं को बाहरी स्रोतों का संदर्भ देकर ऐसा कर सकते हैं या आप अपने स्रोत नियंत्रण को अपने लिए कर सकते हैं।

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

0

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


समाधान बनाएं, LDAPSync। इस समाधान में तीन परियोजनाओं बनाएँ:

  • LDAPSyncLib
  • LDAPSyncSvc
  • LDAPSyncTest

LDAPSyncLib एक DLL परियोजना है कि आपके व्यवसाय तर्क और मुख्य कार्यक्षमता के सभी शामिल हैं।

LDAPSyncSvc Windows सेवा परियोजना है कि दो वर्गों, एक सेवा नियंत्रक वर्ग कि ServiceBase से विरासत, और आपकी सेवा के लिए एक वर्ग होता है। इस परियोजना में LDAPSyncLib को "प्रोजेक्ट संदर्भ" है।

LDAPSyncTest या तो आपकी आवश्यकताओं के आधार पर एक जीयूआई एप्लीकेशन (WinForms, WCF, आदि) या एक कंसोल एप्लिकेशन है। इस परियोजना में LDAPSyncLib को "प्रोजेक्ट रेफरेंस" भी है। इसका एकमात्र उद्देश्य कुछ इंटरफ़ेस प्रदान करना है जो आपको परीक्षण उद्देश्यों के लिए आसानी से आवश्यक व्यावसायिक कॉल में आवश्यक कॉल करने की अनुमति देता है। विजुअल स्टूडियो में, इसे अपने "स्टार्टअप प्रोजेक्ट" के रूप में सेट करें।

अब, जब आप विजुअल स्टूडियो के माध्यम से डीबग में भागते हैं तो आपको एक अच्छी छोटी GUI या कमांड विंडो मिल जाएगी जिसका उपयोग आप मैन्युअल रूप से टेस्ट कॉल करने के लिए कर सकते हैं। जब आप के रूप में एक Windows सेवा स्थापित, LDAPSyncSvc परियोजना के नियंत्रक वर्ग अपने हाथ में लेने और आवश्यक सेवा अनुरोध के सभी संभाल लेंगे (शुरू, रोकें, ठहरें, आदि)

हम लगभग 30 घर में Windows सेवा परियोजनाओं है हम एक दशक से अधिक समय तक प्रबंधन, विकास और परीक्षण कर रहे हैं और यह वर्कफ़्लो उत्पन्न होने पर बग को तुरंत ढूंढने और ठीक करने में अमूल्य साबित हुआ है। आपकी परियोजना के साथ शुभकामनाएं और मुझे उम्मीद है कि यह कुछ भविष्य के Googlers में मदद करता है।

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