NET সমাবেশগুলির সাথে লোডফায়াল এবং লোডফর্মের মধ্যে পার্থক্য?


126

আমি MSDN ডকুমেন্টেশন দিকে তাকিয়ে ছিল এবং আমি এখনও একটু ঠিক ব্যবহার মধ্যে পার্থক্য উপর বিভ্রান্ত am LoadFileএবং LoadFromএকটি সমাবেশ লোড। কেউ এর উদাহরণ আরও ভালভাবে বর্ণনা করার জন্য উদাহরণ বা উপমা সরবরাহ করতে পারে। এমএসডিএন ডকুমেন্টেশন আমাকে আরও বিভ্রান্ত করেছে। এছাড়াও, এটি কেবল প্রতিচ্ছবি মোডে অ্যাসেমব্লিকে লোড করে ব্যতীত ReflectionOnlyLoadFromএকই LoadFrom

যেহেতু আমার .NET অভিজ্ঞতাটি সর্বশ্রেষ্ঠ নয়, তাই লোডফিল ব্যবহার করে এমএসডিএন ডকুমেন্টেশন সম্পর্কিত কিছু প্রশ্ন এখানে রয়েছে:

1) LoadFileঅ্যাসেম্বলিগুলিতে পরীক্ষা করে কী বোঝায় যে একই পরিচয় রয়েছে তবে বিভিন্ন পথে অবস্থিত? পরিচয় কী (উদাহরণ)?

2) এটি LoadFileসূচিত করে যে 'লোডফ্রম প্রসঙ্গে' ফাইল লোড করে না এবং লোড পাথ ব্যবহার করে নির্ভরতাগুলি সমাধান করে না। এর অর্থ কী, কেউ উদাহরণ দিতে পারে?

3) শেষ LoadFileঅবধি , এটি বলেছে যে এই সীমিত দৃশ্যে দরকারী কারণ লোডফ্রোম একই রকম অ্যাসেমসিলিগুলি একইরকম ভিন্ন ভিন্ন পাথগুলি লোড করতে পারে না; এটি কেবল প্রথম এই জাতীয় সমাবেশটি লোড করবে, যা আমাকে আবার একই প্রশ্নে নিয়ে আসে, সমাবেশগুলির পরিচয় কী?


10
সিরিয়াসলি আমি মাঝে মাঝে এটাও ভাবি যে এমএসকে আরও ভাল লেখক বা অন্য কিছু নিয়োগ করা উচিত কারণ বাক্যগুলি সর্বদা বোধগম্য হয় না ...
তারিক


1
@ কলোনেলপ্যানিক এমএস বলতে পারেন যে সবকিছু নথিভুক্ত ... তবে জেরুওর সহায়তার সাথে।
কিংবদন্তি

উত্তর:


96

এটি কি এটি পরিষ্কার করে দেয়?

// path1 and path2 point to different copies of the same assembly on disk:

Assembly assembly1 = Assembly.LoadFrom(path1);
Assembly assembly2 = Assembly.LoadFrom(path2);

// These both point to the assembly from path1, so this is true
Console.WriteLine(assembly1.CodeBase == assembly2.CodeBase);

assembly1 = Assembly.LoadFile(path1);
assembly2 = Assembly.LoadFile(path2);

// These point to different assemblies now, so this is false
Console.WriteLine(assembly1.CodeBase == assembly2.CodeBase);

সম্পাদনা করুন : আপনি আপনার সংশোধিত প্রশ্নে উত্থাপিত প্রশ্নের উত্তর দিতে, আপনি অবশ্যই পড়তে চান সংসদীয় পরিচয়ে সুজান কুক

অনেকগুলি বিধি রয়েছে যা পরিচালনা করে যে কীভাবে সমাবেশগুলি বোঝা হয় এবং তাদের কিছুটির সাথে তাদের নির্ভরতা কীভাবে সমাধান করা হয় - যদি আপনার এসেম্বলএ বিধানসভাবি'র উপর নির্ভরশীল হয় তবে .NET কোথায় এসেম্বলবি সন্ধান করতে হবে? গ্লোবাল অ্যাসেম্বলি ক্যাশে, একই ডিরেক্টরি এটি অ্যাসেম্বলএ বা অন্য কোথাও খুঁজে পেয়েছিল? তদুপরি, যদি এটি that সমাবেশের একাধিক অনুলিপি খুঁজে পায়, তবে এটি কোনটি ব্যবহার করবেন তা কীভাবে বেছে নেওয়া উচিত?

LoadFromনিয়মের একটি সেট রয়েছে, অন্যদিকে নিয়মের LoadFileআরও একটি সেট রয়েছে। এটি ব্যবহার করার জন্য অনেকগুলি কারণ কল্পনা করা শক্ত LoadFileতবে আপনি যদি একই সমাবেশের বিভিন্ন অনুলিপিগুলিতে প্রতিবিম্ব ব্যবহার করতে চান তবে এটি আপনার জন্য রয়েছে।


2
কোডবেস কি পরিচয়ের মতো?
জাইসফট 15

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

1
এটি এটিকে কিছুটা সাফ করে দেয়, তবে কীভাবে প্যাড 1 এবং পাথ 2 ডিস্কে একই অ্যাসেমব্লির বিভিন্ন অনুলিপিগুলিতে নির্দেশ করে লোডফ্রোম ব্যবহার করার সময় এবং লোডফিল ব্যবহার করার সময়, পথ 1 এবং প্যাথ 2 পয়েন্টটি বিভিন্ন সমাবেশে নির্দেশ করে। পথ 1 এবং পাথ 2 কী হবে তার উদাহরণ কী? আপনার ধৈর্য্যের জন্য ধন্যবাদ.
জাইসফট 15

আপনি কেন মান সমতার জন্য দুটি স্ট্রিং রেফারেন্স চেক করেন string.Compare(x, y) == 0? আমার মনে হয় আপনি x == yসেখানে চান ? অস্পষ্ট কারণে যদি আপনি সংস্কৃতি নির্ভর সমতা পরীক্ষা করতে চান তবে এটি লেখার জন্য আরও স্পষ্ট string.Equals(x, y, StringComparison.CurrentCulture), উদাহরণস্বরূপ।
জেপ্পে স্টিগ নীলসন

"জেফসটার্নাল লিঙ্কটি" সুজান কুক অন এসেম্বলি আইডেন্টিটি "তে মনে হচ্ছে এখানে ভেঙে গেছে ...
মার্টিন ভার্জানস

61

থেকে সুজান্ন কুক এর ব্লগ :

লোডফিল বনাম লোডফ্রোম

সাবধানতা অবলম্বন করুন - এগুলি একই জিনিস নয়।

লোডফ্রোম () ফিউশন এর মধ্য দিয়ে যায় এবং অন্য সমাবেশে একটি ভিন্ন পথে পুনর্নির্দেশ করা যেতে পারে তবে একই পরিচয় দিয়ে যদি কেউ ইতিমধ্যে লোডফ্র্যাম প্রসঙ্গে লোড করা থাকে।

লোডফায়াল () মোটেও ফিউশনের সাথে আবদ্ধ হয় না - লোডার ঠিক এগিয়ে যায় এবং কলার অনুরোধ করে যা ঠিক * লোড করে। এটি লোড বা লোডফ্রম প্রসঙ্গটি ব্যবহার করে না।

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

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

এখানে দেখুন ।

একই ব্লগে একটি বাইন্ডিং প্রসঙ্গে নিবন্ধটি চয়ন করাও দেখুন ।


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

@ কাইসোফ্ট - সুজান কুকের ব্লগ অ্যাসেমব্লিশ আইডেন্টিটির উত্তর নিয়ে পুনরায় উদ্ধার করেছে। ব্লগস.এমএসডন.সৌজক / আর্কাইভ/2003/07/21/57232 . aspx দেখুন । এটি মূলত একটি "সমাবেশ ডিসপ্লে নাম" এবং এটির মতো: "সিস্টেম, সংস্করণ = 1.0.3300.0, সংস্কৃতি = নিরপেক্ষ, পাবলিককি টোকেন = b77a5c561934e089" সুতরাং সমাবেশের আসল নাম উভয়কেই অন্তর্ভুক্ত করে, এটি অন্যান্য সনাক্তকারী তথ্যের পাশাপাশি সংস্করণ নম্বর (যেমন পাবলিককি টোকেন ইত্যাদি)।
ক্রেগটিটিপি

1
ফিউশন সম্পর্কে কথা বলার সময় তিনি কী উল্লেখ করছেন?
জাইসফট

1
আসলে, জেফ স্পট আছে। এই লিঙ্কটি দেখুন: grimes.demon.co.uk/workshops/fusionWS.htm ফিউশন সাব সিস্টেমের উপর একটি সুন্দর টিউটোরিয়াল এবং এটি নেট।
অ্যাসেমব্লিগুলি

1
কেবলমাত্র একটি দ্রুত আপডেট, নোট করুন যে উপরের ইউআরএল (grimes.demon.co.uk/workshops/fusionWS.htm) আর বৈধ নয় এবং এখন চলে গেছে: রিচার্ডগ্রিমেসস
ওয়ার্কশপস

45

প্রচুর মাথা চুলকানোর পরে আমি আজ বিকেলে নিজের মধ্যে একটি পার্থক্য আবিষ্কার করেছি।

আমি রানটাইমের সময় একটি ডিএলএল লোড করতে চেয়েছিলাম, এবং ডিএলএল অন্য ডিরেক্টরিতে বাস করত। ডিএলএলটির নিজস্ব নির্ভরতা (ডিএলএল) ছিল যা একই ডিরেক্টরিতেও বাস করত।

লোডফিল (): নির্দিষ্ট ডিএলএল লোড হয়েছে, তবে নির্ভরতা নয়। সুতরাং যখন প্রথম কলটি ডিএলএল থেকে অন্য সমস্ত ডিএলএলগুলির মধ্যে একটিতে করা হয়েছিল তখন এটি একটি ফাইলনটফাউন্ডএক্সেপশন ছুড়ে দেয়।

লোডফ্রোম (): আমি উল্লিখিত ডিএলএল এবং সেই ডিরেক্টরিতে থাকা সমস্ত নির্ভরশীলতা লোড করেছি।


4
আসলে আমার সমস্যাটা ছিল! আমি FileNotFoundExceptionসবেমাত্র চাপিয়ে দিয়েছিলাম এমন সমাবেশটি দ্বারা উল্লিখিত একটি অ্যাসেমব্লিতে সংজ্ঞায়িত কোনও অবজেক্টের নতুন উদাহরণ তৈরি করার সময় আমি পেয়ে যাচ্ছিলাম .LoadFile। এটিকে পরিবর্তন করে এই সমস্যার .LoadFromসমাধান করতে হাজির, তবে কেন জানলাম না! ধন্যবাদ
কনেল

1
ধন্যবাদ, আমারও একই সমস্যা ছিল।
ইভানড্রো আইজি জাও

4

দ্রষ্টব্য: যদি কোনও সমাবেশ 8.3 পাথ ব্যবহার করে লোড করা হয় এবং তার পরে 8-অ-পাথ থেকে, এগুলি একই শারীরিক ডিএলএল হওয়া সত্ত্বেও তাদের বিভিন্ন সমাবেশ হিসাবে দেখা হবে।



0

একটি পার্থক্য যা আমি লক্ষ্য করেছি:

Assembly.LoadFile - সীমিত ব্যবহারকারীর অধিকারের সাথে বিভিন্ন অ্যাপডোমেনে লোড করে (বিভিন্ন প্রিন্সিপাল)। সেরিলাইজেশন / ডিজারিলাইজেশন এর মতো ক্রিয়াকলাপ সম্পাদন করা যায়নি।

এসেম্বলি.লয়েডফ্রম - একই ব্যবহারকারীর অধিকারগুলি (একই প্রিন্সিপাল) সহ একই অ্যাপডোমেনে অ্যাসেমবিলি লোড করে।


3
এটি সঠিক নয়। আপনার কী বিশ্বাস করে যে এসেম্বলি.ল্ডফাইলে একটি অ্যাসেমব্লিকে অন্য অ্যাপডোমায়নে লোড করে?
fr34kyn01535

0

আমার ক্ষেত্রে, আমাকে কেবল @ এএসপি অ্যাপ্লিকেশন ক্যাশেটি কেবল মুছে ফেলতে হয়েছিল C:\Windows\Microsoft.NET\Framework\[asp version]\Temporary ASP.NET Files। সাইটটি প্রথম চালিত হলে এটি পুনরায় তৈরি করা হয়। প্রথমে আইআইএস বন্ধ করতে ভুলবেন না।

আশা করি এটি আমার মতো করে এমন কাউকে সহায়তা করবে।

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