एक में कई विधानसभाओं का विलय कैसे करें?


87

मैं EXE प्रोजेक्ट (azure एप्लिकेशन के लिए स्टार्टअप कार्य) का उपयोग करके अपनी सेवा स्टैक का उपभोग कर रहा हूं, जिसमें मैंने EXE प्रोजेक्ट में सेवा स्टैक के DLL और कुछ Azure के DLL का अनुसरण किया है।

DLLs

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

मैंने इस सेवा स्टैक के डीएल का उपयोग करने के लिए उपयोग किया है

JsonServiceClient client = new JsonServiceClient(servicepath);

मुझे इन सभी DLL को अपने EXE में बंडल करने के लिए क्या करना चाहिए?

जवाबों:


120

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

या

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

या

  • कोड है कि अपने आप को 10 से कम लाइनों (मुक्त लेकिन न्यूनतम स्रोत कोड परिवर्तन) में
    सभी आवश्यक निर्भरता को "एम्बेडेड संसाधन" के रूप में चिह्नित करते हैं - इस तरह से वे EXE फ़ाइल में शामिल हैं ... आपको एक AssemblyResolveहैंडलर सेटअप करना होगा जो रनटाइम पर संसाधन से पढ़ता है और .NET रनटाइम के लिए आवश्यक DLL लौटाता है ...

4
जेफरी रिक्टर को एम्बेड करने वाली विधानसभाओं के समाधान की याद दिलाने के लिए धन्यवाद! एक उपकरण के लिए कॉस्टुरा का उल्लेख करने वाले मेरे उत्तर को देखें , जो इसे आवश्यक कोड को इंजेक्ट करने के साथ जोड़ती है।
कोडफॉक्स

29

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

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

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


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

@EmdadulSawon शायद आप उन्हें अपने एक परिवाद में संसाधनों के रूप में शामिल कर सकते हैं?
अलेक्जेंडर

27

एम्बेडेड संसाधनों के रूप में संदर्भित असेंबली को शामिल करने के लिए एक महान उपकरण कोस्टुरा (एक फ़ोडी ऐड-इन) है। लेखक साइमन क्रॉप ने इसका वर्णन इस प्रकार है:

[...] दो तरीकों का एक संयोजन:

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

विशेषताएं:

  • जिसमें डिबग प्रतीक भी शामिल हैं
  • एम्बेडेड असेंबली का संपीड़न
  • विशिष्ट असेंबली को शामिल करना / बाहर करना
  • अन्य (देखें रीडमी )

9
OMG Costura.Fody सही जवाब है। नौगेट से पैकेज स्थापित किया, परियोजना का पुनर्निर्माण किया और अब मेरे पास एक स्टैंडअलोन EXE AWESOME है !!
एरिक लाबाशोस्की

4
मैं विश्वास नहीं कर सकता कि यह कितना आसान है। बस नौगट से पैकेज स्थापित करें और आपका काम हो गया।
इरशेंथिल

2
मैं कॉस्टुरा का उपयोग कर रहा हूं। साथ ही। यह सेटअप के लिए मामूली है और संसाधनों के रूप में NuGet पैकेज को शामिल करना आसान है। परियोजना प्राप्त करें।
माइकल सिल्वर

1
@ user3700562, यह तकनीक नई असेंबली नहीं बनाती है, बल्कि मौजूदा एक में एक या अधिक संदर्भित असेंबलियों को एम्बेड करती है।
कोडफॉक्‍स

1
महान समाधान! मैं एक वर्ष से इसका उपयोग करता हूं और मुझे कोई समस्या नहीं थी। लेकिन कृपया ध्यान दें कि इसमें केवल आपकी शीर्ष परियोजना द्वारा संदर्भित असेंबली शामिल हैं। यदि आपका ऐप किसी अन्य प्रोजेक्ट का संदर्भ देता है, जो तीसरे पक्ष की विधानसभा का संदर्भ देता है, तो आपको इसे अपने शीर्ष स्तर के प्रोजेक्ट में जोड़ना होगा।
डेमिर

7

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


2
बहुत खुबस! मेरे लिए बहुत अच्छा काम किया!
एलेक्स पेल्लेटियर

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

3

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

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

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

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

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


2

चेकआउट ServiceStack.Gap परियोजना जो एक पार मंच में पता चलता है howto ILMerge ServiceStack के कई उदाहरण .exe

ServiceStack में कई अन्य सुविधाएँ भी शामिल हैं जो विशेष रूप से इन ऐप्स को बनाने के लिए उपयुक्त हैं जहाँ यह:

  • .NET की HTTP श्रोता का उपयोग करके आपकी सेवाओं को स्व-होस्ट किया जा सकता है
  • पूर्व-संकलित रेजर दृश्यों का समर्थन करता है
  • एंबेडेड संसाधनों का समर्थन करता है
  • Sqlite और OrmLite में एक एम्बेडेड डेटाबेस का समर्थन करता है
  • एक एकल .exe में ILMerged किया जा सकता है

1

.net कोर 3 प्रोजेक्ट कॉन्फ़िगरेशन में दो नए विकल्प पेश करता है, जिसे सिंगल फाइल पब्लिश और ट्रिमिंग कहा जाता है।

आप डॉक्स पर अधिक विवरण यहां देख सकते हैं , प्रोजेक्ट कॉन्फ़िगरेशन संदर्भ के लिए यहां कॉपी किया गया है।

  1. प्रोजेक्ट कॉन्फ़िगरेशन:
    <PropertyGroup>
      <RuntimeIdentifier>win10-x64</RuntimeIdentifier>
      <PublishSingleFile>true</PublishSingleFile>
    </PropertyGroup>

    <PropertyGroup>
      <PublishTrimmed>true</PublishTrimmed>
    </PropertyGroup>
  1. CLI का उपयोग करना:
    dotnet publish -r win10-x64 -p:PublishSingleFile=true
    dotnet publish -r <rid> -c Release

आपके आवेदन के लिए छंटनी वाली एकल असेंबली प्राप्त करने के लिए दो विकल्पों को एक साथ संयोजित करने के लिए यह पूरी तरह से समर्थित है।


यह आपको एकल विधानसभा नहीं देता है। जब आप एप्लिकेशन को चलाने का प्रयास करते हैं तो यह आपकी फ़ाइलों को एक ज़िप आर्काइव में संकुचित कर देता है और फिर इसे उपयोगकर्ता-फ़ोल्डर में अनपैक कर देता है।
जेसपर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.