মাইক্রোসফ্ট বিজ্ঞপ্তি সংক্রান্ত রেফারেন্সগুলির সাথে কীভাবে সম্মেলনগুলি তৈরি করেছিল?


107

। নেট বিসিএলে এর মধ্যে বিজ্ঞপ্তি সংক্রান্ত রেফারেন্স রয়েছে:

  • System.dll এবং System.Xml.dll
  • System.dll এবং System.Configuration.dll
  • System.Xml.dll এবং System.Configuration.dll

এখানে নেট রিফ্লেক্টরের একটি স্ক্রিনশট রয়েছে যা আমার অর্থটি বোঝায়:

এখানে চিত্র বর্ণনা লিখুন

মাইক্রোসফ্ট কীভাবে এই সমাবেশগুলি তৈরি করেছিল তা আমার কাছে রহস্য। এটির অনুমতি দেওয়ার জন্য কি কোনও বিশেষ সংকলন প্রক্রিয়া প্রয়োজন? আমি কল্পনা করছি এখানে আকর্ষণীয় কিছু চলছে।


2
খুব ভাল প্রশ্ন। আমি এটি পরিদর্শন করার জন্য আসলে সময় নিই নি, তবে উত্তরটি জানতে আগ্রহী। প্রকৃতপক্ষে, দেখে মনে হচ্ছে ডাইকাম একটি বুদ্ধিমানের সরবরাহ করেছে।
নলডোরিন

3
যদি তাদের সকলের একে অপরের প্রয়োজন হয় তবে কেন এই সমস্ত লোকেরা একে অপরের সাথে একীভূত হয় না? এর কোন বাস্তব কারণ আছে?
আন্দ্রেয় পিটারসন

1
মজার প্রশ্ন ... আমি এরিক এরিক লিপার্টের উত্তরটি জানতে চাই! এবং আন্দ্রেয়াস যেমন বলেছিলেন, আমি অবাক হয়েছি কেন তারা সমস্ত কিছু একই সমাবেশে রাখেনি ...
টমাস লেভস্ক

ঠিক আছে যদি একটি অ্যাসেমব্লিকে আপডেট করার দরকার হয় তবে তাদের অন্য সংস্থাগুলির স্পর্শ করার প্রয়োজন হবে না। আমি দেখি একমাত্র কারণ। আকর্ষণীয় প্রশ্ন যদিও
আত্মবিশ্বাস

2
এই উপস্থাপনাটি দেখুন (asmmeta ফাইল): msakademik.net/academicdays2005/Serge_Lidin.ppt
আফশারি

উত্তর:


58

আমি কেবল এটিই বলতে পারি যে মনোো প্রকল্প এটি কী করে। উপপাদ্যটি বেশ সহজ, যদিও এটি একটি কোড জগাখিচুড়ি দেয়।

তারা প্রথমে System.Cffration.dll সংকলন করে, অংশটি ছাড়াই System.XML.dll রেফারেন্সের প্রয়োজন হয়। এর পরে, তারা System.XML.dll স্বাভাবিকভাবে সংকলন করে। এখন আসে ম্যাজিক। তারা System.onfigration.dll পুনরায় সংকলন করে, অংশটি System.XML.dll রেফারেন্সের প্রয়োজন সহ। বিজ্ঞপ্তি রেফারেন্স সহ এখন একটি সফল সংকলন রয়েছে।

সংক্ষেপে:

  • A এর প্রয়োজন নেই কোডের বি এবং B এর রেফারেন্স ছাড়াই সংকলিত হয় A
  • বি সংকলিত হয়।
  • ক পুনরায় সংযুক্ত করা হয়।

1
এটি ভিজ্যুয়াল স্টুডিও দ্বারা অবরুদ্ধ, তবে কমান্ড লাইন সংকলক (csc.exe) সরাসরি ব্যবহার করে করা যেতে পারে। আমার উত্তর দেখুন।
আলফ্রেড

14
আমি জানি. মনোর মূল বিল্ড সিস্টেম ভিজ্যুয়াল স্টুডিও নয়। অনুমান মাইক্রোসফ্টস হয় না।
ডায়কাম

35

আরবেরি ইয়ং এবং ডাইকাম কোনও কিছুর উপরে। মাইক্রোসফ্ট অভ্যন্তরীণ সরঞ্জাম ব্যবহার করে যা সমাবেশগুলি বিচ্ছিন্ন করতে, সমস্ত অভ্যন্তরীণ / প্রাইভেট স্টাফ এবং পদ্ধতি সংস্থাগুলি কেটে ফেলার জন্য এবং ডিএইলএসএম ব্যবহার করে (আইএলএসএম ব্যবহার করে) আবার ডিহাইড্রেটেড অ্যাসেম্বলি বা মেটাডেটা অ্যাসেম্বলি বলে যা আইএলডিএএসএম ব্যবহার করে internal এটি প্রতিটি সময় সমাবেশের পাবলিক ইন্টারফেস পরিবর্তন করা হয়।

বিল্ড চলাকালীন, মেটাডেটা অ্যাসেমব্লিগুলি আসলগুলির পরিবর্তে ব্যবহৃত হয়। সেই পথে চক্রটি ভেঙে গেছে।


1
আকর্ষণীয় উত্তর, আপনার কোনও লিঙ্ক আছে?
হেন্ক হলটারম্যান

আমি সরঞ্জামটির বাহ্যিক রেফারেন্স খুঁজতে চেষ্টা করছি। এটি মাইক্রোসফ্টের বাইরে প্রকাশিত বলে আমি মনে করি না, তবে ধারণাটি সহজ: ডিসেসেম্বল-স্ট্রিপ ইন্টারনালস-রিসেমেম্বল।
Srdjan Jovcic

সম্মত - আকর্ষণীয় উত্তর। এই ব্যাক আপ কিছু লিঙ্ক ভাল হবে।
ড্রয় নোকস

হ্যাঁ, এটি সত্যই এটি হয়ে যায় (ব্যক্তিগত অভিজ্ঞতা থেকে)।
পাভেল মিনায়েভ

1
বিল্ড হওয়ার পরে তারা দৃ strongly়ভাবে স্বাক্ষরিত হয় না (তারা বিলম্বিত স্বাক্ষরিত হয়), তাই ডিহাইড্রেট সমাবেশগুলি স্বাক্ষরিত হয় না।
শ্রদ্জন জোভিক

26

এটি ডাইকাম বর্ণিতভাবেই করা যেতে পারে তবে ভিজ্যুয়াল স্টুডিও আপনাকে এটি করতে বাধা দেয়।

আপনাকে সরাসরি কমান্ড-লাইন সংকলক csc.exe ব্যবহার করতে হবে।

  1. csc / টার্গেট: লাইব্রেরি ClassA.cs

  2. csc / টার্গেট: লাইব্রেরি ClassB.cs /references:ClassA.dll

  3. csc / টার্গেট: লাইব্রেরি ClassA.cs ClassC.cs /references:ClassB.dll


//ClassA.cs
namespace CircularA {
    public class ClassA {
    }
}


//ClassB.cs
using CircularA;
namespace CircularB {
    public class ClassB : ClassA  {
    }
}


//ClassC.cs
namespace CircularA {
    class ClassC : ClassB {
    }
}

আপনি এটি ভিজুয়াল স্টুডিওতেও করতে পারেন যদিও এটি খুব কঠোর হলেও, প্রাথমিক উপায়টি হল # যদি থাকে তবে ব্যবহারটি সমাধান করতে এবং সমাধান এক্সপ্লোরার ব্যবহার করে রেফারেন্সটি সরিয়ে ফেলুন, এটি তৃতীয় ধাপে বিপরীত। অন্য যেভাবে আমি ভাবছি তা হ'ল একই ফাইলগুলি কিন্তু বিভিন্ন উল্লেখ সহ একটি তৃতীয় প্রকল্প ফাইল। আপনি বিল্ড অর্ডার নির্দিষ্ট করতে পারলে এটি কাজ করবে।
ডায়কাম

আমি যতদূর জানি, এটি এখানে পরীক্ষা করতে পারে না।
ডায়কাম

আমি সত্যিই এটি দেখতে চাই। আমি এখানে যা পরীক্ষা করেছি তা থেকে, আপনি যে মুহুর্তে রেফারেন্স যুক্ত করার চেষ্টা করবেন, আইডিই আপনাকে থামিয়ে দেয়।
আলফ্রেড মাইয়ার

আমি জানি. তবে একটি তৃতীয় প্রজেক্টের সেই উল্লেখ নেই এবং # চিহ্ন রয়েছে, এবং দ্বিতীয়টি রেফারেন্স করা হবে, যা প্রথমটি রেফারেন্স করেছে। কোনও চক্র নেই। কিন্তু তৃতীয়টি প্রথম সমাবেশের কোডটি প্রথম এবং আউটপুটগুলিকে ব্যবহার করে assembly একটি সমাবেশ সহজেই একই চশমা সঙ্গে অন্য দ্বারা প্রতিস্থাপন করা যেতে পারে। তবে আমি মনে করি স্ট্র্যাংনামিং এই পদ্ধতিতে সমস্যা তৈরি করতে পারে।
ডায়কাম

এটি অন্যরকম একটি পদ্ধতি হলেও, শ্রদজনের উত্তর মতো কিছুটা।
ডায়কাম

18

যতক্ষণ আপনি প্রকল্পের উল্লেখ ব্যবহার না করেন ভিজুয়াল স্টুডিওতে এটি করা বেশ সহজ ... এটি চেষ্টা করুন:

  1. ভিজ্যুয়াল স্টুডিও খুলুন
  2. 2 ক্লাস লাইব্রেরি প্রকল্প "ClassLibrary1" এবং "ClassLibrary2" তৈরি করুন।
  3. বিল্ড
  4. ClassLibrary1 থেকে 3 ধাপে তৈরি করা dll তে ব্রাউজ করে ClassLibrary2 এ একটি উল্লেখ যুক্ত করুন।
  5. ClassLibrary2 থেকে 3 ধাপে তৈরি করা dll তে ব্রাউজ করে ClassLibrary1 এ একটি উল্লেখ যুক্ত করুন।
  6. আবার তৈরি করুন (দ্রষ্টব্য: আপনি যদি উভয় প্রকল্পে পরিবর্তন করেন তবে উভয় উল্লেখকে "তাজা" করার জন্য আপনার দু'বার তৈরি করতে হবে)

সুতরাং আপনি এটি কিভাবে হয়। তবে গুরুত্ব সহকারে ... আপনি কখনই এটি বাস্তব প্রকল্পে করবেন না! যদি আপনি তা করেন তবে সান্তা এই বছর আপনার জন্য কোনও উপহার আনবে না।


1
২ exception-৩১ ডিসেম্বরের মধ্যে থাকলে এবং উপহারগুলি ইতিমধ্যে সুরক্ষিত করা হয়েছে
জেসি হাফস্টেলার

6

আমার ধারণা, এটি অ্যাসিক্লিকস অ্যাসেমব্লির সেট দিয়ে শুরু করে এবং আইএলমার্জ ব্যবহার করে ছোট অ্যাসেমব্লিকে যৌক্তিকভাবে সম্পর্কিত গ্রুপগুলিতে একত্রিত করার মাধ্যমে এটি করা যেতে পারে I


4

ওয়েল, আমি এটি উইন্ডোতে কখনই করি নি, তবে আমি এটি প্রচুর সংকলন-লিঙ্ক-আরটিএল পরিবেশের জন্য করেছি যা এটির জন্য ব্যবহারিক পূর্বসূর হিসাবে কাজ করেছিল। আপনি যা করেন তা হ'ল প্রথমে ক্রস-রেফারেন্সগুলি ছাড়াই "টার্গেটগুলি" তৈরি করুন লিঙ্ক, তারপরে বিজ্ঞপ্তি উল্লেখগুলি যুক্ত করুন, তারপরে পুনরায় লিঙ্ক করুন। লিঙ্কারগুলি সাধারণত বিজ্ঞপ্তি রেফগুলি বা রেফ চেইনগুলি অনুসরণ করার বিষয়ে যত্ন করে না, তারা কেবল প্রতিটি রেফারেন্সটি নিজস্বভাবে সমাধান করতে সক্ষম হওয়ার বিষয়ে চিন্তা করে।

সুতরাং আপনার যদি দুটি গ্রন্থাগার, A এবং B থাকে যা একে অপরকে রেফারেন্স করতে পারে তবে এর মতো কিছু চেষ্টা করুন:

  1. কোনও রেফ ছাড়াই লিঙ্ক এ বি।
  2. এফের সাথে বি লিঙ্ক করুন
  3. লিঙ্ক এ, বিতে রেফগুলি যুক্ত করুন

ডাইকম একটি ভাল বক্তব্য রেখেছেন, এটি সংকলন করেছে, লিংক নয় et নেট, কিন্তু নীতিটি একই রয়েছে: আপনার ক্রস-রেফারেন্স উত্সগুলি তাদের রফতানি প্রবেশের পয়েন্টগুলি তৈরি করুন, তবে তাদের মধ্যে একটির সাথে অন্যের সাথে তাদের নিজস্ব রেফারেন্সও আটকে আছে বাইরে। তাদের যেমন তৈরি করুন। তারপরে, বাহ্যিক রেফারেন্সগুলি আনস্টব করুন এবং সেগুলি পুনর্নির্মাণ করুন। এটি কোনও বিশেষ সরঞ্জাম ছাড়াই কাজ করা উচিত, বাস্তবে, এই পদ্ধতির প্রতিটি অপারেটিং সিস্টেমে কাজ করেছে যা আমি এটি চেষ্টা করেছি (প্রায় 6 টির মধ্যে)। যদিও স্পষ্টতই এমন কিছু যা এটি স্বয়ংক্রিয়ভাবে চলে এটি একটি বড় সহায়তা হবে।


উপপাদ্যটি সঠিক। যাইহোক। নেট ওয়ার্ল্ডে, লিঙ্কিং কোনও গতিশীল নয় এবং কার্যকর হয়। এটি সংকলনের পদক্ষেপ যেখানে এই সমাধানটির প্রয়োজন।
ডায়কাম

আপনাকে আবার ঠিক করার জন্য দুঃখিত: পি। তবে সংকলনের সময় রেফারেন্সিং (লিঙ্কিং) ঘটে। নেট ওয়ার্ল্ডে, যা সেই নির্দিষ্ট ইসিএমএ স্পেক থেকে উদ্ভূত সমস্ত কিছু। এইভাবে মনো, ডটগনু এবং নেট। উইন্ডোজ নিজেই নয়।
ডায়কাম

1

একটি সম্ভাব্য পন্থা হ'ল শর্তসাপেক্ষ সংকলন (# আইফ) ব্যবহার করে প্রথমে এমন একটি সিস্টেম.ডিল সংকলন করতে হবে যা এই অন্যান্য সমাবেশগুলির উপর নির্ভর করে না, তারপরে অন্যান্য সমাবেশগুলি সংকলন করে এবং শেষের দিকে System.dll এ XML এবং এর উপর নির্ভর করে অংশগুলি অন্তর্ভুক্ত করে কনফিগারেশন.


1
দুর্ভাগ্যক্রমে এটি আপনাকে শর্তসাপেক্ষে কোনও সমাবেশকে রেফারেন্স দেওয়ার অনুমতি দেয় না (আমি আশা করি এটি সম্ভব হত, এটি সত্যিই আমার প্রকল্পগুলির একটিতে সহায়তা করবে ...)
টমাস লেভস্ক

1
শর্তসাপেক্ষ রেফারেন্সগুলি .csproj ফাইল সম্পাদনা করে সহজেই করা যায়। <রেফারেন্স> উপাদানটিতে কেবল একটি শর্ত বৈশিষ্ট্য যুক্ত করুন।
ড্যানিয়েল

0

প্রযুক্তিগতভাবে, এটি সম্ভব যে এগুলি মোটেই সংকলিত হয়নি, এবং হাত দ্বারা একত্রিত হয়েছিল। এগুলি সর্বোপরি নিম্ন স্তরের গ্রন্থাগারগুলি।


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