লোডারএক্সসেপশন সম্পত্তি কীভাবে পুনরুদ্ধার করবেন?


128

আমার পরিষেবা রেফারেন্স আপডেট করার সময় আমি একটি ত্রুটি বার্তা পেয়েছি:

কাস্টম সরঞ্জাম সতর্কতা: অনুরোধ করা ধরণের এক বা একাধিক লোড করতে অক্ষম। আরও তথ্যের জন্য লোডারএক্সেপশন সম্পত্তি পুনরুদ্ধার করুন।

আমি কীভাবে লোডারএক্সসেপশন সম্পত্তিটি পুনরুদ্ধার করতে পারি?

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


6
কীভাবে আপনি এটি ঠিক করেছেন? "ডোমেন অবজেক্ট প্রজেক্টটি রিম্পোর্টিং" বলতে কী বোঝ? (প্রকল্পের রেফারেন্স সরান এবং এটি আবার যুক্ত করুন?)
নিকস তসোকোস

উত্তর:


142
try
{
  // load the assembly or type
}
catch (Exception ex)
{
  if (ex is System.Reflection.ReflectionTypeLoadException)
  {
    var typeLoadException = ex as ReflectionTypeLoadException;
    var loaderExceptions  = typeLoadException.LoaderExceptions;
  }
}

1
আমি আপনাকে উত্তর হিসাবে চিহ্নিত করেছি কারণ আমি মনে করি এটি অন্যদের জন্য এই সতর্কতা / ত্রুটিটি সবচেয়ে কার্যকর হবে।
রোজন

3
আমি এই সমাধানটি ব্যবহার করার চেষ্টা করছি, তবে আমার ডাব্লুসিএফ পরিষেবায় আমার কোনও প্রবেশ পয়েন্ট নেই যার চারপাশে প্রকৃতপক্ষে ট্রাই ব্লকটি लपेटতে হবে।
জর্ডান

3
এই কোডটি আমার কোডটির সাথে কোনও সম্পর্কযুক্ত থাকলে আমার পক্ষে কাজ করবে। আমি try...catchআমার পুরো Installer.csক্লাসের চারপাশে কিছু রেখেছি , আর কিছুই না! আমার কোডটি এটি চালিত হয় না যখন আমি ইনস্টলারটি কার্যকর করার চেষ্টা করি। কেউ কি আরও তথ্যের জন্য লোডারএক্সেপশন সম্পত্তি পুনরুদ্ধার করবেন জানেন ? পছন্দ করুন, কোনও ফোল্ডারে ব্রাউজ করুন এবং লগ ফাইলটি দেখুন?
jp2code

5
ক্যাচ ক্লজটি সমস্ত ব্যতিক্রম ধরা ফেলবে তবে কেবল রিফ্লেকশনটাইপলয়েড এক্সেক্সশনগুলি হ্যান্ডেল করবে। এরকম কিছু আরও ভাল হবে। catch (ReflectionTypeLoadException ex) { var typeLoadException = ex as ReflectionTypeLoadException; var loaderExceptions = typeLoadException.LoaderExceptions; }
স্কট মুনরো

1
@ স্কটমুন্রো: আপনি যদি এটিকে এক ধরণের হিসাবে ধরেন তবে একই ধরণের সাহায্যে আরও একটি ভেরিয়েবল কেন তৈরি করুন এবং একটি কাস্ট করবেন? এই চলা উচিত: catch (ReflectionTypeLoadException ex) { var loaderExceptions = ex.LoaderExceptions; }। এছাড়াও, যদি না আপনি কাস্ট ব্যর্থ হওয়ার প্রত্যাশা করেন এবং শূন্য অনুসন্ধান করবেন, সরাসরি কাস্ট করা ভাল তাই এটি অবিলম্বে ব্যর্থ হবে এবং পরে কোনও শূন্য রেফারেন্স ব্যতিক্রম var typeLoadException = (ReflectionTypeLoadException)ex;
ছাড়াই

74
catch (ReflectionTypeLoadException ex)
{        
    foreach (var item in ex.LoaderExceptions)
    {
          MessageBox.Show(item.Message);                    
    }
}

আমি একটি পুরানো থ্রেডটি পুনরুত্থিত করার জন্য দুঃখিত, তবে এটির অন্য কারও কাছে আসার জন্য লোডার ব্যতিক্রমটি (আসল প্রতিচ্ছবি টাইপলোডএক্সসেপশন ব্যবহার করে) টানতে একটি আলাদা সমাধান পোস্ট করতে চেয়েছিলাম।


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

1
"ক্যাচ স্টেটমেন্টটি এর স্টেটমেন্ট ব্লকটি হারিয়েছে"। Godশ্বর, আমি পাওয়ারশেলকে ঘৃণা করি।
আউল

অনেক ধন্যবাদ, এই সমাধানটি সঠিক কারণ এটি সঠিক সমস্যাটিকে পিন করে। ব্যতিক্রম ধরা কোনও লাভ নেই এবং কিছুই করবেন না।
মুহাম্মদ আশার হাসান

5

ভিজ্যুয়াল স্টুডিওতে কুইক ওয়াচ ব্যবহার করে আপনি নিক্ষিপ্ত ব্যতিক্রমের ভিউ ডেটেলগুলি থেকে লোডারএক্সেপশনগুলি অ্যাক্সেস করতে পারেন:

($exception).LoaderExceptions

ধন্যবাদ! আমাকে অবাক করে তোলে কেন অ্যাক্সেসের প্রয়োজন ছাড়াই সেই তথ্যটি অন্তর্ভুক্ত করবেন না LoaderExceptions, কারণ এতে প্রকৃতপক্ষে প্রাসঙ্গিক তথ্য রয়েছে।
গুইটারের

0

যারা চারপাশে এবং / অথবা ইন্টারেক্টিভ মোডে তদন্ত করছেন তাদের জন্য আরেকটি বিকল্প:

$ ত্রুটি [0] .Exception.LoaderExceptions

দ্রষ্টব্য: [0] স্ট্যাক থেকে সাম্প্রতিকতম ত্রুটিটি ধরে ফেলে

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