একাধিক সমাবেশকে কীভাবে একীভূত করবেন?


87

আমি আমার পরিষেবা স্ট্যাকটি এক্সই প্রজেক্ট (আজেউর অ্যাপ্লিকেশনটির জন্য স্টার্টআপ টাস্ক) ব্যবহার করে গ্রাহ্য করছি যা আমি নিম্নলিখিত পরিষেবা স্ট্যাকের ডিএলএল এবং কিছু আজারের ডিএলএলকে এক্সই প্রকল্পে অনুলিপি করেছি।

dlls

আমি যখন এই EXE প্রকল্পটি তৈরি করব তখন Azure DLL গুলি আমার EXE এর সাথে বান্ডিল হবে তবে পরিষেবা স্ট্যাকের DLL EXE এর সাথে বান্ডিল হবে না কারণ যে কোনও মেশিনে আমার EXE চালানোর জন্য আমাকে সমস্ত পরিষেবা স্ট্যাকের DLL ম্যানুয়ালি অনুলিপি করতে হবে।

আমি এই পরিষেবা স্ট্যাকের dll ব্যবহার করতে ব্যবহার করেছি

JsonServiceClient client = new JsonServiceClient(servicepath);

আমার EXE এ এই সমস্ত ডিএলএল বান্ডিল করতে আমার কী করতে হবে?

উত্তর:


120

আপনার কাছে বেশ কয়েকটি বিকল্প রয়েছে:

বা

  • স্মার্টঅ্যাস্প্যাসেস (বাণিজ্যিক) এর মতো কিছু সরঞ্জাম ব্যবহার করুন
    এটি এম্বেড এবং অন্যান্য জিনিসের সাথে একীভূত করতে পারে (আপনার উত্স কোড পরিবর্তন করার দরকার নেই)

বা

  • কোড যা আপনি 10 টিরও কম লাইনে (নিখরচায় তবে নূন্যতম উত্স কোড পরিবর্তন)
    সমস্ত প্রয়োজনীয় নির্ভরতাগুলি "এম্বেডেড রিসোর্স" হিসাবে চিহ্নিত করুন - এইভাবে এগুলি এক্স ফাইলের মধ্যে অন্তর্ভুক্ত করা হয়েছে ... আপনাকে একটি AssemblyResolveহ্যান্ডলার সেটআপ করতে হবে যা রানটাইম সময়ে রিসোর্সগুলি থেকে পড়বে এবং প্রয়োজনীয় ডিএলএলগুলি .NET রানটাইমে ফিরিয়ে দেয় ...

4
জেফরি রিখরারের সমাবেশগুলি এম্বেড করার সমাধানটি মনে করিয়ে দেওয়ার জন্য ধন্যবাদ! কোনও সরঞ্জামের জন্য কস্টুরার উল্লেখ করে আমার উত্তরটি দেখুন যা এটি প্রয়োজনীয় কোডটি ইনজেকশনের সাথে সংযুক্ত করে।
কোডফক্স

29

আপনি যে সরঞ্জামটির সন্ধান করছেন তাকে ILMerge বলে । এটি একটি কমান্ড লাইন সরঞ্জাম এবং এটি ব্যবহার করা যেতে পারে:

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

এখানে একটি নিবন্ধ রয়েছে যা এখানে আপনার ভিএস প্রকল্পের সেটআপের মধ্যে আইএলমার্জকে কীভাবে অন্তর্ভুক্ত করা যায় তা বর্ণনা করে


হাই, আমি কি এক্সিকিউটেবলের মধ্যে বাহ্যিক সংস্থান (ফাইল / চিত্র) যুক্ত করতে পারি?
এমদাদুল সাওন

@ এমদাদুলসওন সম্ভবত আপনি এগুলি আপনার কোনও লিবে সংস্থান হিসাবে অন্তর্ভুক্ত করতে পারেন?
আলেকজান্ডার

27

এম্বেড থাকা সংস্থান হিসাবে রেফারেন্সিয়াল অ্যাসেম্বলিসিগুলি অন্তর্ভুক্ত করার একটি দুর্দান্ত সরঞ্জাম হ'ল কোস্টুরা (একটি ফডি অ্যাড-ইন)। লেখক সাইমন ক্রোপ এটিকে নিম্নরূপ বর্ণনা করেছেন:

[...] দুটি পদ্ধতির সংমিশ্রণ:

ফলাফলটি একটি অতি সহজ সমাধান যা কেবলমাত্র নিউগেট থেকে কস্টুরা.ফডি আনতে হবে ।

বৈশিষ্ট্য:

  • ডিবাগ প্রতীক সহ
  • এম্বেড থাকা সমাবেশগুলির সংক্ষেপণ
  • নির্দিষ্ট সমাবেশগুলি সহ / বাদ দিয়ে lud
  • অন্যান্য ( রেডমি দেখুন )

9
ওএমজি কস্টুরা.ফডি সঠিক উত্তর। ন্যুগেট থেকে প্যাকেজটি ইনস্টল করা হয়েছে, প্রকল্পটি পুনর্নির্মাণ করুন এবং এখন আমার কাছে একচেটিয়া EXE অসাধারণ!
এরিক লাবাশোস্কি

4
আমি বিশ্বাস করতে পারি না এটি কত সহজ। কেবল নুগেট থেকে প্যাকেজ ইনস্টল করুন এবং আপনার কাজ শেষ।
ইরাসেথিল

4
আমি কস্টুরা.ফডিও ব্যবহার করছি। এটি সেটআপ করাতে তুচ্ছ এবং NuGet প্যাকেজগুলি সংস্থান হিসাবে অন্তর্ভুক্ত করা সহজ dead প্রকল্প পান।
মাইকেল সিলভার

4
@ ব্যবহারকারী ৩00০০৫62২, এই কৌশলটি নতুন অ্যাসেমব্লি তৈরি করে না বরং এক বা একাধিক রেফারেন্সড অ্যাসেমব্লিকে একটি বিদ্যমান সংস্থায় এম্বেড করে।
কোডফক্স

4
দুর্দান্ত সমাধান! আমি এক বছর ধরে এটি ব্যবহার করি এবং কোনও সমস্যা ছিল না। তবে দয়া করে মনে রাখবেন এটিতে কেবলমাত্র আপনার শীর্ষ প্রকল্পের দ্বারা বর্ণিত সমাবেশগুলি অন্তর্ভুক্ত। যদি আপনার অ্যাপ্লিকেশনটি অন্য কোনও প্রকল্পের উল্লেখ করে যা কোনও তৃতীয় পক্ষের সমাবেশকে রেফারেন্স করে তবে আপনার এটিকে আপনার শীর্ষ স্তরের প্রকল্পে যুক্ত করা দরকার।
ডেমির

7

ব্যবহার করে দেখুন ILMerge-গুই, .নেট সমবায় । এটি একটি জিইউআই ভিত্তিক Ilmergeযা সমস্ত কমান্ড লাইনের কাজ এড়িয়ে চলে।


4
কল্পনাপ্রসূত! আমার জন্য দুর্দান্ত কাজ করেছেন!
অ্যালেক্স পলেটিয়ার

4
কোডপ্লেক্স বন্ধ হয়ে যাচ্ছে, তাই এখানে স্থানান্তরিত প্রকল্পের লিঙ্কটি দেওয়া হয়েছে: bitbucket.org/wvd-vegt/ilolvegui
Hegi

3

আপনার যদি ডাব্লুপিএফ নির্ভরতা থাকে তবে আপনার বিকল্পগুলি আরও সীমিত হতে পারে ..... আইএলমার্জ এগুলি মোকাবেলা করার জন্য উপস্থিত হবে না। কস্টুরা.ফডি (উপরে কোডফক্স দ্বারা উল্লিখিত) আমাদের জন্য নিখুঁতভাবে কাজ করেছে এবং যেতে 5 মিনিট সময় নিয়েছে ... একটি খুব ভাল অভিজ্ঞতা।

নুগেটের সাথে ইনস্টল করুন (প্যাকেজ ম্যানেজার কনসোলে সঠিক ডিফল্ট প্রকল্প নির্বাচন করা হচ্ছে)।

এটি "কপিরাইট লোকাল" চিহ্নযুক্ত সমস্ত ডিএলএলগুলিকে একত্রিত করে = সত্য এবং একীভূত .EXE উত্পাদন করে (স্ট্যান্ডার্ড আউটপুট পাশাপাশি, এখন বেশিরভাগই প্রয়োজন হয় না) যা সংকুচিতও হয়। এটি তখন এককভাবে ব্যবহার করা যেতে পারে।

লাইসেন্সটি এমআইটি হিসাবে রয়েছে যাতে আপনি প্রয়োজনীয় হিসাবে সংশোধন / বিতরণ করতে পারেন।

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


2

সার্ভিস স্ট্যাক.গ্যাপ প্রকল্পটি চেকআউট করুন যা আইএলমার্জ সার্ভিসস্ট্যাককে একক ক্রস প্ল্যাটফর্ম .exe এর বিভিন্ন উদাহরণ দেখায় ।

সার্ভিস স্ট্যাকের মধ্যে এমন আরও অনেকগুলি বৈশিষ্ট্য রয়েছে যা এই এমবেডেড অ্যাপ্লিকেশনগুলি তৈরি করার জন্য বিশেষভাবে উপযুক্ত যেখানে এটি:

  • আপনার পরিষেবাগুলিকে .NET এর এইচটিটিপি শ্রোতা ব্যবহার করে স্ব-হোস্ট করার অনুমতি দেয়
  • প্রাক-সংকলিত রেজার ভিউগুলি সমর্থন করে
  • এম্বেডড রিসোর্স সমর্থন করে
  • স্ক্লাইট এবং ওর্মলাইটে এম্বেড করা ডাটাবেস সমর্থন করে
  • একক .exe এ ILMerged হতে পারে

2

। নেট কোর 3 প্রকল্প কনফিগারেশনে দুটি নতুন বিকল্পের পরিচয় করায়, যাকে একক ফাইল প্রকাশ এবং ছাঁটাই বলা হয়।

আপনি এখানে ডক্সে আরও বিশদ পেতে পারেন , প্রকল্পের কনফিগারেশনটি এখানে রেফারেন্সের জন্য অনুলিপি করা হয়েছে।

  1. প্রকল্প কনফিগারেশন:
    <PropertyGroup>
      <RuntimeIdentifier>win10-x64</RuntimeIdentifier>
      <PublishSingleFile>true</PublishSingleFile>
    </PropertyGroup>

    <PropertyGroup>
      <PublishTrimmed>true</PublishTrimmed>
    </PropertyGroup>
  1. সিএলআই ব্যবহার:
    dotnet publish -r win10-x64 -p:PublishSingleFile=true
    dotnet publish -r <rid> -c Release

আপনার আবেদনের জন্য ছাঁটাইযুক্ত একক সমাবেশ পেতে দুটি বিকল্পকে একত্রিত করার জন্য এটি সম্পূর্ণরূপে সমর্থিত।


4
এটি আপনাকে একক সমাবেশে দেয় না। এটি সহজেই আপনার ফাইলগুলি একটি জিপ সংরক্ষণাগারে সংকুচিত করে এবং আপনি যখন অ্যাপ্লিকেশন চালানোর চেষ্টা করবেন তখন এটি কোনও ব্যবহারকারী-ফোল্ডারে আনপ্যাক করে।
জেস্পার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.