ভিজ্যুয়াল স্টুডিওতে একটি সমাবেশ রেফারেন্সের "নির্দিষ্ট সংস্করণ" সম্পত্তিটি ঠিক কীভাবে কাজ করে?


155

আজ আমার ভিজ্যুয়াল স্টুডিও ২০১০-এর সমাবেশ সংক্রান্ত রেফারেন্সের "নির্দিষ্ট সংস্করণ" সম্পত্তিটি ঘনিষ্ঠভাবে লক্ষ্য করা গিয়েছিল unexpected এমনকি এসও, এটি আমার কাছে উপস্থিত রয়েছে, সমস্ত উত্তর নেই, সুতরাং এখানে প্রশ্নটি স্ব-উত্তর দেওয়ার জন্য আমার চেষ্টা করা হয়েছে:

কিভাবে ঠিক আছে "নির্দিষ্ট সংস্করণটিতে" ভিসুয়াল স্টুডিও একটি সমাবেশ রেফারেন্স কাজ সম্পত্তির?

উত্তর:


254

এটি একটি সংকলন-সময় সম্পত্তি!

একটি অতি গুরুত্বপূর্ণ বিষয়টি জানতে হবে যে "সুনির্দিষ্ট সংস্করণ" এমন একটি সম্পত্তি যা সংকলন সময়ে কার্যকর হয় এবং রানটাইম সময় নয়

এটা সব সম্পর্কে কি?

যখন কোনও প্রকল্প নির্মিত হয়, তখন বিল্ড সিস্টেমটি যে শারীরিক অ্যাসেম্বলিগুলি ব্যবহার করে তা সন্ধান করার জন্য প্রকল্পের সমাবেশ সংক্রান্ত রেফারেন্সগুলি সমাধান করা দরকার। যদি "নির্দিষ্ট সংস্করণ" চেক সম্পাদিত হয় (বিভাগটি "কখন" নির্দিষ্ট সংস্করণ "চেক করা হয়?" দেখুন), এটি সমাবেশ রেজোলিউশন প্রক্রিয়ার ফলাফলকে প্রভাবিত করে:

  • বিল্ড সিস্টেমটি এমন একটি শারীরিক সমাবেশকে চিহ্নিত করে যা এটি সম্ভাব্যভাবে ব্যবহার করতে পারে
  • বিল্ড সিস্টেমটি ফিজিকাল অ্যাসেমব্লির সংস্করণকে সমাবেশ রেফারেন্সের জন্য .csproj ফাইলে সঞ্চিত সমাবেশ সংস্করণের সাথে তুলনা করে
  • যদি দুটি অ্যাসেম্বলি সংস্করণ হুবহু হয় তবে রেজোলিউশন প্রক্রিয়া সফল হয় এবং পাওয়া ফিজিকাল অ্যাসেমব্লিটি বিল্ডের জন্য ব্যবহৃত হয়
  • যদি দুটি অ্যাসেম্বলি সংস্করণ মিলে না যায় তবে শারীরিক সমাবেশ বাতিল হয়ে যায় এবং পরবর্তী সম্ভাব্য সমাবেশটি সনাক্ত করে রেজোলিউশন প্রক্রিয়া অব্যাহত থাকে
  • যদি আর কোনও সম্ভাব্য শারীরিক অ্যাসেম্বলিগুলি অবস্থিত না করা যায়, তবে রেজোলিউশন প্রক্রিয়া ব্যর্থ হয়। এটি সংকলক সতর্কতা (এমএসবি 3245 সতর্কতা) এর ফলাফল দেয় যা আপনাকে বলে যে রেফারেন্সটি সমাধান করা যায়নি।
  • আকর্ষণীয় যথেষ্ট, বিল্ড তারপর অবিরত! কোডটির যদি সমাবেশে আসল কোন উল্লেখ থাকে তবে বিল্ডটি সফল হয় (পূর্বে উল্লিখিত সতর্কতার সাথে)। কোডটির রেফারেন্স থাকলে বিল্ডটি এমন একটি ত্রুটির সাথে ব্যর্থ হয় যা দেখে মনে হয় কোডটি অজানা প্রকার বা নেমস্পেস ব্যবহার করছে। বিল্ডটি কেন সত্যিই ব্যর্থ হয়েছে তার একমাত্র ইঙ্গিতটি হ'ল সতর্কতা এমএসবি 3245।

আদেশগুলি যাতে সমাবেশগুলি সমাধান করা হয়

বিধানসভা রেজোলিউশন প্রক্রিয়াটি সম্ভাব্য অ্যাসেমব্লিকে যে আদেশে চিহ্নিত করেছে এটি হ'ল:

  1. <HintPath>.Csproj ফাইলে উপাদানটির দ্বারা সমাবেশটি সমাবেশ
  2. প্রকল্পের আউটপুট পাথ
  3. জিএসি

নোট করুন যে যদি জিএসি-তে সমাবেশের বেশ কয়েকটি সংস্করণ উপস্থিত থাকে তবে রেজোলিউশন প্রক্রিয়াটি প্রথমে সর্বোচ্চ সংস্করণ সহ সমাবেশে সমাধানের চেষ্টা করে। "সুনির্দিষ্ট সংস্করণ" চেক তৈরি না করা হলে এটি গুরুত্বপূর্ণ।

"নির্দিষ্ট সংস্করণ" কখন পরীক্ষা করা হয়?

ভিসুয়াল স্টুডিও .csproj ফাইলে পাওয়া দুটি টুকরো তথ্যের "নির্দিষ্ট সংস্করণ" পরীক্ষা করতে হবে কিনা তার সিদ্ধান্তটিকে ভিত্তি করে:

  • <SpecificVersion>উপাদানটির উপস্থিতি বা অনুপস্থিতি এবং এর মান (যদি এটি উপস্থিত থাকে)
  • সমাবেশ রেফারেন্সে সংস্করণ তথ্যের উপস্থিতি বা অনুপস্থিতি

সংস্করণ তথ্যের সাথে একটি সাধারণ সমাবেশের রেফারেন্সটি এটির মতো দেখাচ্ছে:

<Reference Include="Foo, Version=1.2.3.4, Culture=neutral, processorArchitecture=MSIL">
  <SpecificVersion>True</SpecificVersion>
  <HintPath>..\..\Bar\Foo.dll</HintPath>
</Reference>

সংস্করণ তথ্য ছাড়াই এই জাতীয় সমাবেশটি দেখতে কেমন লাগে :

<Reference Include="Foo">
[...]

"সুনির্দিষ্ট সংস্করণ" চেক করা হয় এবং কখন হয় না তা নীচের সারণিতে প্রদর্শিত হয়।

                            |     Version information
                            |  Present       Not present
----------------------------+------------------------------
<SpecificVersion>           |
- Present, has value True   |    Yes (1)        Yes (check always fails) (2)
- Present, has value False  |    No  (3)        No (4)
- Not present               |    Yes (5)        No (6)

এখানে আশ্চর্যের বিষয়টি হ'ল উভয় <SpecificVersion>এবং সংস্করণ তথ্য অনুপস্থিত থাকলে কোনও চেক করা হয় না (কেস 6)। আমি চেকটি সম্পাদিত হবে এবং সর্বদা ব্যর্থ হবে (কেস 2 এর সমান) আশা করতাম কারণ আমার বুঝতে না পারলে <SpecificVersion>ডিফল্ট মান "সত্য" বোঝায়। এটি ভিজ্যুয়াল স্টুডিও ২০১০ এর কোলাহল হতে পারে যেখানে আমি আমার পরীক্ষা করেছিলাম did

আপনি যখন ভিজ্যুয়াল স্টুডিও ইউআইতে কোনও সংসদীয় রেফারেন্সের বৈশিষ্ট্যগুলি পরীক্ষা করেন (রেফারেন্সটি নির্বাচন করুন এবং এফ 4 টিপুন) তখন আপনি "নির্দিষ্ট সংস্করণ" বৈশিষ্ট্যের জন্য যে মানটি দেখেন তা ভিজুয়াল স্টুডিওতে "নির্দিষ্ট সংস্করণ" সম্পাদন করতে যাচ্ছে কিনা তা আপনাকে জানিয়ে দেয় চেক করুন। 6 এর ক্ষেত্রে ইউআই "সত্য" প্রদর্শন করবে, যদিও <SpecificVersion>উপাদানটি .csproj ফাইলে উপস্থিত নেই।

"স্থানীয় অনুলিপি করুন" এর পার্শ্ব প্রতিক্রিয়া

যদি "স্থানীয় অনুলিপি" সম্পত্তিটি "সত্য" হিসাবে সেট করা থাকে তবে "নির্দিষ্ট সংস্করণ" চেকের কারণে অ্যাসেম্বলি রেজোলিউশন প্রক্রিয়া ব্যর্থ হয়, কোনও সমাবেশ কপি করা হয় না।

আমার মুখোমুখি


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

2
@ গ্যাভিনহপ প্রশ্ন 1: না, সংস্করণ চেকিং শক্তিশালী নামগুলির মধ্যে সীমাবদ্ধ নয়, মূলত এটি কারণ যে কোনও সমাবেশের নাম সংস্করণ অন্তর্ভুক্ত করতে পারে তবে তবুও এটি একটি শক্ত নাম হতে পারে না (যেমন PublicKeyToken=অংশটি অনুপস্থিত থাকে )। এছাড়াও, আপনি যদি আমার পোস্টের শেষের দিকে টেবিলটি চেক করেন তবে আপনি দেখতে পাচ্ছেন যে সংস্করণ Version=চেকিংটি অংশটি .csproj এ সমাবেশের নাম থেকে অনুপস্থিত থাকলেও ঘটতে পারে occur প্রশ্ন 2: আমি ধরে নিলাম যে সমাবেশের নামটি তুলনা করার জন্য ব্যবহৃত হয়, হ্যাঁ। আমি তথ্যের জন্য অন্য কোন উত্স জানতে হবে না।
হার্জবউব

"6 টি ক্ষেত্রে ইউআই" সত্য "প্রদর্শন করবে, যদিও <স্পেসিফিক ভার্সন> উপাদানটি .csproj ফাইলে উপস্থিত না রয়েছে।" - এটি প্রদর্শিত হয় যে ডিফল্ট মানটি সত্য । থেকে UI 'তে মধ্যে নির্দিষ্ট সংস্করণটিতে টগল করানোর পর সত্য<SpecificVersion> ট্যাগ সম্পূর্ণরূপে বাদ দেওয়া, যা পূর্বে মান ছিল মিথ্যা
সমিস

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

35

আপনি যখন কোনও রেফারেন্স যুক্ত করেন তখন ভিজ্যুয়াল স্টুডিও প্রজেক্ট ফাইলে অ্যাসেমব্লির [এসেম্বলি ভার্সন] রেকর্ড করে। এটা গুরুত্বপূর্ণ. আপনি বলে, একটি বাগ ফিক্স একটি বছর পরে তারপর আপনি কি নিশ্চিত যে আপনার সাথে প্রকল্পের পুনর্নির্মাণের করতে চাই তৈরি সঠিক রেফারেন্স একই সংস্করণ তাই এটি একটি সত্য ড্রপ-হয়। রেফারেন্স অ্যাসেমব্লি পরিবর্তিত হলে আপনি একটি ত্রুটি পাবেন।

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

পরিণতিটি বোঝার জন্য অত্যন্ত গুরুত্বপূর্ণ, আপনাকে দুর্ঘটনা এড়াতে প্রোগ্রামের পুরো বিল্ডটি পুনরায় চালু করতে হবে। প্রোগ্রামটি ক্র্যাশ করার সময় সংস্করণ মেলেনি এবং কেবলমাত্র <bindingRedirect>.config ফাইলের মধ্যে দমন করা যায় যা ঝুঁকিপূর্ণ।


2
"নির্দিষ্ট সংস্করণ" কেন গুরুত্বপূর্ণ তা তথ্যের জন্য ধন্যবাদ , আমি আমার উত্তরে যে বিশুদ্ধ যান্ত্রিক দিকটি আবরণ করছি তার এটি একটি ভাল সহচর।
হার্জবিউব

@ હંস প্যাসেন্ট - আপনার শেষ অনুচ্ছেদটি স্পেসিফিক ভার্সনটি সত্য বা মিথ্যা? আমি মনে করি আপনি এটিকে সত্য হিসাবে সেট করলে এগুলি ফলাফল।
গ্রীন আইডেন্ডি

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

1
VS2013 এবং। নেট 4.5.1 অটো জেনারেটবাইন্ডিং রাইর্ডারেক্টস থেকে সাবধান থাকুন আপনি একটি নির্দিষ্ট সংস্করণ ব্যবহার করতে বলেছেন যদিও তারা ডেল বাইন্ডিংকে একটি নতুন সংস্করণে পুনর্নির্দেশ করতে পারে
ডেনিস কুইপার্স

1
@ হ্যান্সপাস্যান্ট আমি ভেবেছিলাম যে [AssemblyVersion]সমাবেশগুলি শক্তিশালী নাম স্বাক্ষরিত না হলে সিএলআর অ্যাকাউন্ট গ্রহণ করে না ।
tm1
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.