2011-11-10 9 views
70

मैं EXE प्रोजेक्ट (एज़ूर एप्लिकेशन के लिए स्टार्टअप कार्य) का उपयोग करके अपनी सर्विस स्टैक का उपभोग करता हूं जिसमें मैंने निम्नलिखित सेवा स्टैक के डीएलएल & को कुछ एज़ूर के डीएलएल को EXE प्रोजेक्ट में कॉपी किया है।एकाधिक असेंबली को एक में कैसे विलय करें?

dlls

जब मैं इस EXE परियोजना निर्माण कर लिया तो Azure DLLs मेरी EXE लेकिन सेवा ढेर के DLL EXE के साथ बंडल नहीं किया जाएगा के साथ बंडल किया जाएगा, क्योंकि किसी भी मशीन मैं सभी सेवा ढेर के नकल करने की जरूरत है पर मेरी EXE चलाने के लिए मैन्युअल रूप से डीएलएल।

मैं

JsonServiceClient client = new JsonServiceClient(servicepath); 

उपयोग करने के लिए मुझे अपने EXE करने के लिए इन सभी DLLs बंडल करने के लिए क्या करना है चाहिए इस सेवा ढेर के dll का इस्तेमाल किया है?

उत्तर

95

आपके पास कई विकल्प है:

  • उपयोग ILMerge (मुक्त)
    howto के लिए here देख सकते हैं और here

या

  • उपयोग SmartAssembly जैसे कुछ उपकरण (वाणिज्यिक)
    एम्बेड और अन्य बातों के अलावा विलय कर सकते हैं (कोई ज़रूरत नहीं अपने स्रोत कोड को बदलने के लिए)

या

  • code that yourself in less than 10 lines (मुफ्त लेकिन न्यूनतम स्रोत कोड परिवर्तन)
    सभी आवश्यक निर्भरताओं को चिह्नित करें "एम्बेडेड रिसौर ई "- इस तरह से वे EXE फ़ाइल में शामिल कर रहे हैं ... आप एक AssemblyResolve हैंडलर जो रनटाइम पर संसाधन से पढ़ता है और .NET रनटाइम के लिए आवश्यक DLLs रिटर्न ...
+3

असेंबली एम्बेड करने के जेफरी रिचटर के समाधान की याद दिलाने के लिए धन्यवाद! मेरे उत्तर का जवाब [कोस्टुरा] (https://github.com/Fody/Costura/) एक उपकरण के लिए देखें जो आवश्यक कोड इंजेक्शन के साथ जोड़ता है। – CodeFox

26

जिस उपकरण को आप ढूंढ रहे हैं उसे ILMerge कहा जाता है। यह एक कमांड लाइन उपकरण है और इस तरह इस्तेमाल किया जा सकता:

ilmerge /target:winexe /out:MyApp.exe 
     MyExe.exe ServiceStack.dll ServiceStack.Interfaces.dll ServiceStack.ServiceInterface.dll ServiceStack.Text.dll 

वहाँ भी एक आलेख वर्णन करता है कि कैसे अपने वी.एस. परियोजना सेटअप में ILMerge शामिल करने के लिए here

+0

हाय, मैं निष्पादन में बाहरी संसाधन (फ़ाइल/छवि) जोड़ सकते हैं? –

6

प्रयास करें ILMerge-GUI, the .NET merger सेटअप की जरूरत है। यह एक जीयूआई आधारित है Ilmerge जो सभी कमांड लाइन काम से बचाता है।

+2

शानदार! मेरे लिए बहुत अच्छा काम किया! –

+1

कोडेप्लेक्स बंद हो रहा है, इसलिए यहां स्थानांतरित प्रोजेक्ट लिंक है: https://bitbucket.org/wvd-vegt/ilmergegui – Hegi

2

ServiceStack.Gap प्रोजेक्ट चेकआउट करें जो आईएलएमर्ज सर्विसस्टैक को एक एकल क्रॉस-प्लेटफ़ॉर्म में कैसे दिखाता है .exe

  • अपनी सेवाओं को स्वयं के द्वारा होस्ट का उपयोग करने के लिए अनुमति देता है:

    ServiceStack भी अन्य सुविधाओं है कि विशेष रूप से अच्छी तरह से इन बनाने एम्बेडेड क्षुधा जहां यह के लिए अनुकूल है की एक संख्या भी शामिल है।नेट के HTTP श्रोता

  • का समर्थन करता है पूर्व संकलित उस्तरा दृश्य
  • एंबेडेड समर्थित है संसाधन
  • SQLite और OrmLite में एक एम्बेडेड डेटाबेस
  • एक भी .exe
19

करने के लिए एक महान उपकरण में ILMerged किया जा सकता है समर्थन करता है संदर्भित असेंबली शामिल हैं क्योंकि एम्बेडेड संसाधन Costura (Fody ऐड-इन) हैं। लेखक साइमन क्रॉप यह वर्णन इस प्रकार है:

[...] दो विधियों के संयोजन:

परिणाम एक सुपर सरल समाधान है जिसे केवल NuGet से Costura.Fody लाने की आवश्यकता है।

विशेषताएं:

  • डिबग प्रतीकों
  • एम्बेडेड विधानसभाओं के संपीड़न
  • सहित/छोड़कर विशिष्ट विधानसभाओं सहित
  • अन्य (Readme देख)
+7

ओएमजी कॉस्टुरा। फोडी सही जवाब है। पैकेज को नूजेट से इंस्टॉल किया गया, प्रोजेक्ट का पुनर्निर्माण किया और अब मेरे पास एक स्टैंडअलोन एक्सई अद्भुत है !! –

+3

मुझे विश्वास नहीं है कि यह कितना आसान है। बस nuget से संकुल स्थापित करें और आपका काम पूरा हो गया है। – iraSenthil

+1

मैं भी Costura.Fody का उपयोग कर रहा हूँ। संसाधनों के रूप में NuGet संकुल को शामिल करना आसान और मृत आसान है। परियोजना प्राप्त करें। –

2

यदि आपके पास WPF अपने निर्भरता विकल्प अधिक सीमित हो सकते हैं ..... ILMerge इनसे निपटने के लिए प्रतीत नहीं होता है। Costura.Fody (ऊपर कोडफॉक्स द्वारा उल्लिखित) ने हमारे लिए पूरी तरह से काम किया है और जाने के लिए लगभग 5 मिनट लग गए ... एक बहुत अच्छा अनुभव।

Nuget के साथ स्थापित करें (पैकेज प्रबंधक कंसोल में सही डिफ़ॉल्ट प्रोजेक्ट का चयन)।

यह विलीन हो जाती है सभी DLLs चिह्नित "कॉपी स्थानीय" = सच और जो भी संकुचित है (मानक आउटपुट, जिनमें से अधिकांश अब आवश्यक नहीं है के साथ) एक विलय कर दिया .EXE पैदा करता है। इसके बाद इसे स्टैंडअलोन का उपयोग किया जा सकता है।

लाइसेंस एमआईटी है ताकि आप आवश्यकतानुसार संशोधित/वितरित कर सकें।

https://github.com/Fody/Costura/

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