সমাবেশ বাঁধাই পুনঃনির্দেশ: কিভাবে এবং কেন?


126

এটি কোনও সমস্যা প্রশ্ন নয় বরং সমাবেশ সম্পর্কিত পুনর্নির্দেশের কাজকে বাধ্যকরণ সম্পর্কিত একটি সাধারণ বোঝার প্রশ্ন।

ক্যোয়ারী

  1. কেন বাধ্যতামূলক পুনর্নির্দেশটি কেবল বড় সংস্করণ এবং নাবালিক্য, বিল্ড এবং পুনর্বিবেচনার সংখ্যাগুলি দেখায়?
  2. পুরানো এবং নতুন সংস্করণটি কি কেবল তখনই পরিবর্তিত হয় যখন বড় সংস্করণে পরিবর্তন হয়?

    <dependentAssembly>
        <assemblyIdentity name="FooBar"  
                          publicKeyToken="32ab4ba45e0a69a1"  
                          culture="en-us" />  
    
        <bindingRedirect oldVersion="7.0.0.0" newVersion="8.0.0.0" />  
    </dependentAssembly>
    

এটি যে কোনও সংস্করণ হতে পারে, কেবল প্রধান নয়। উদাহরণস্বরূপ:oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0"
এভ্ক

@ এভ্ক: আমি যে সমস্ত উদাহরণ দেখেছি সেগুলি কেবল প্রধান সংস্করণে দেখায়।
নিখিল অগ্রওয়াল

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

উত্তর:


165

বাঁধাই পুনঃনির্দেশ কেন প্রয়োজন হয়? ধরুন আপনার কাছে অ্যাপ্লিকেশন এ রয়েছে যা গ্রন্থাগার বি'র উল্লেখ করেছে এবং সংস্করণ 1.1.2.5 এর লাইব্রেরি সি। পরিবর্তে লাইব্রেরি বি এছাড়াও গ্রন্থাগার সি উল্লেখ করে, তবে সংস্করণ 1.1.1.0। এখন আমাদের একটি বিরোধ আছে, কারণ আপনি রানটাইমে একই অ্যাসেমব্লির বিভিন্ন সংস্করণ লোড করতে পারবেন না। এই দ্বন্দ্বের সমাধান করার জন্য আপনি সাধারণত নতুন সংস্করণে বাঁধাই পুনঃনির্দেশ ব্যবহার করতে পারেন (তবে এটি পুরানোও হতে পারে)। যা তুমি কর আবেদন A -এর app.config ফাইলের মধ্যে নিম্নলিখিত যুক্ত করে, অধীন configuration > runtime > assemblyBindingঅধ্যায় (দেখুন এখানে পূর্ণ কনফিগ ফাইলের একটি উদাহরণ জন্য):

<dependentAssembly>
    <assemblyIdentity name="C"  
                      publicKeyToken="32ab4ba45e0a69a1"  
                      culture="en-us" />  

    <bindingRedirect oldVersion="1.1.1.0" newVersion="1.1.2.5" />  
</dependentAssembly>

আপনি মানচিত্রের জন্য বিভিন্ন সংস্করণও নির্দিষ্ট করতে পারেন:

<bindingRedirect oldVersion="0.0.0.0-1.1.1.0" newVersion="1.1.2.5" />  

এখন লাইব্রেরি বি, যা সংস্করণ ১.১.১.০ এর সি এর সাথে সংকলিত হয়েছিল, রানটাইমে 1.1.2.5 সংস্করণের সি ব্যবহার করবে। অবশ্যই, আপনি আরও নিশ্চিত করে নিন যে লাইব্রেরি সি পিছনের দিকে সামঞ্জস্যপূর্ণ বা এটি অপ্রত্যাশিত ফলাফলের দিকে নিয়ে যেতে পারে।

আপনি লাইব্রেরির কোনও সংস্করণ পুনর্নির্দেশ করতে পারেন, কেবল প্রধান নয় major


কোন ফাইল এবং কোন বিভাগের অধীনে এই প্রবেশ? কেউ দয়া করে এমএসডিএন বা রেফারেন্সের অনুরূপ উত্সের কোনও লিঙ্ক সরবরাহ করতে পারেন? মনে রাখবেন যে সমস্ত অনুসন্ধান ইঞ্জিনের ক্ষেত্র জুড়ে লোকেরা আপনার SO Q / A নিবন্ধে অবতরণ করবে এবং উল্লেখগুলি সমালোচনাযোগ্য। আমার এক সহকর্মী আমাকে এক সপ্তাহের ছুটিতে যাওয়ার আগে ঠিক "আপনার এক্সাইলে ফাইলটিতে কেবল একটি অ্যাসেমব্লিকে পুনর্নির্দেশ করুন" বলার জন্য বলেছিলেন এবং আমি এখানে পৌঁছেছি এবং এই উত্তরটি দেখতে দুর্দান্ত লাগলেও এর প্রসঙ্গ এবং রেফারেন্সের অভাব রয়েছে।
tpartee

বৈধ প্রশ্নসমূহ @ টিপার্টি, আমি কনফিগার বিভাগটি এবং ডকস.মাইক্রোসফট
স্মিট

1
অ্যাপ্লিকেশন এটির কনফিগারেশন ফাইলটিতে অ্যালেক্সান্ডারডার্ক @ গ্রন্থাগারগুলির কনফিগারেশন ফাইলগুলিতে তাদের কোনও প্রভাব নেই (যতক্ষণ না আমি অবগত আছি) কেবলমাত্র যখন এই গ্রন্থাগারটি ইউনিট পরীক্ষার লাইব্রেরি এবং ইউনিট পরীক্ষা রানার দ্বারা কিছুটা অর্থে "মৃত্যুদন্ড কার্যকর করা" হয়।
এভ্ক

1
@AlexanderDerck অনেক upvotes এবং এমনকি খয়রাত, যা ঠিক জিজ্ঞাসা ছিল সঙ্গে কয়েক সপ্তাহ প্রশ্ন দুয়েক আগে ছিল কিন্তু কেউ বিশ্বাসী উত্তর প্রদান করতে সক্ষম ছিল - stackoverflow.com/q/48377474/5311735
Evk

1
@ কোডেঙ্গাইন পাবলিক কেটোকেন এসেম্বলি সি সনাক্ত করে Only কেবল স্বাক্ষরিত অ্যাসেমব্লিতেই সেই পাবলিক কী টোকেন তাদের সনাক্ত করে। : এখানে টোকেন দেওয়া যে আপনার সমাবেশ আছে কিভাবে আপনি খুঁজে বের করতে পারবে সে সম্পর্কে একটি সম্পর্কিত প্রশ্ন হল stackoverflow.com/q/3045033/5311735
Evk

55

আমরা নিউটনসফট.জসনের জন্য বাঁধার পুনঃনির্দেশ সহ একটি ইস্যুটি নিয়ে এসেছি। উইন 10 ফাইলের বৈশিষ্ট্য "9.0.1.19813" এ আমরা ফাইল সংস্করণটি সন্ধান করেছি, নম্বরটি দেখলাম এবং পুনর্নির্দেশ ব্যর্থ হতে থাকবে। আরও তদন্ত করে দেখা গেছে যে আমরা ফাইল সংস্করণটি দেখছিলাম, অ্যাসেম্বলি সংস্করণ নয়। সুতরাং, আমি অবাক হয়েছি যে লোকেরা ফাইল সংস্করণ (যা প্রায়শই পরিবর্তিত হয়) এবং অ্যাসেম্বলি সংস্করণ (যা আপনি উইন্ডোজ 10 ফাইল এক্সপ্লোরারে দেখতে পাচ্ছেন না) ভুল করছেন are একটি dll এর অ্যাসেম্বলি সংস্করণ দেখতে আপনি এটিকে পাওয়ারশেলে চালাতে পারেন। আপনি যার জন্য সংস্করণ সন্ধান করতে চান তার সাথে dll নামটি প্রতিস্থাপন করুন।

[Reflection.AssemblyName]::GetAssemblyName('C:\development\bin\Newtonsoft.Json.dll').Version

উপরের ফলাফল।

Major  Minor  Build  Revision

-----  -----  -----  --------

9      0      0      0

তথ্যসূত্র দেখুন:

উইন্ডোজ ভিস্তা এবং আরও নতুন (উইন্ডোজ,, ২০০৮) .NET অ্যাসেমব্লির বিধানসভা সংস্করণটি আমি কীভাবে দেখতে পারি?

https://support.microsoft.com/en-nz/help/556041

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


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