DL- র একটি উল্লেখ যুক্ত করা যায়নি could


95

আমি যখন সি # অ্যাপ্লিকেশনে রেফারেন্স হিসাবে একটি .dll ফাইল যুক্ত করব তখন এটি একটি ত্রুটি দেখায়:

".... dll" তে একটি উল্লেখ যুক্ত করা যায়নি lease দয়া করে নিশ্চিত হয়ে নিন যে ফাইলটি অ্যাক্সেসযোগ্য এবং এটি একটি বৈধ সমাবেশ বা সিওএম উপাদান।

ILDissassembler বলেছেন যে কোনও বৈধ সিএলআর শিরোলেখ নেই তাই আমি এটি Regsvr32 ব্যবহার করে নিবন্ধ করার চেষ্টা করি এবং এটি আমাকে আরও একটি ত্রুটি দেয়:

মডিউল "" লোড করা হয়েছিল তবে ত্রুটি কোড '0x80004005' দিয়ে DLLRegisterServer এ কল ব্যর্থ হয়েছে

আমি একটি 64 বিট উইন্ডোজ 7 মেশিনে ভিএস 2010 চূড়ান্ত সংস্করণ ব্যবহার করছি। কি সমস্যা হতে পারে?

কোনও ইঙ্গিত / জবাবের জন্য ধন্যবাদ

উত্তর:


54

নিম্নলিখিত আমার জন্য কাজ করেছে:

সংক্ষিপ্ত উত্তর

কমান্ড লাইনের (সেন্টিমিটার) মাধ্যমে নিম্নলিখিতটি চালান:

TlbImp.exe cvextern.dll        //where cvextern.dll is your dll you want to fix.

এবং আপনার জন্য একটি বৈধ dll তৈরি করা হবে।

দীর্ঘ উত্তর

  • খোলা সেমিডি

  • TlbImp.exe খুঁজুন। সম্ভবত সি: \ প্রোগ্রাম ফাইল (x86) \ মাইক্রোসফ্ট এসডিকে s উইন্ডোজ \ v7.0A \ বিনে অবস্থিত। যদি আপনি এটি খুঁজে না পান তবে আপনার মূল ফোল্ডারে যান (সি: \ বা ডি :) এবং চালান:

    dir tlbimp.exe /s              //this will locate the file.
    
  • Tlbimp.exe চালান এবং আপনার dll এর পিছনে রাখুন। উদাহরণ: যদি আপনার dll হয় cvextern.dll। আপনি চালাতে পারেন:

    TlbImp.exe cvextern.dll
    
  • Tlbimp.exe এর একই ফোল্ডারে একটি নতুন dll তৈরি করা হয়েছে। আপনি এটি আপনার প্রকল্পের রেফারেন্স হিসাবে ব্যবহার করতে পারেন।

5
TlbImp.exe অ্যাক্সেস করার আরেকটি উপায় হ'ল ভিজ্যুয়াল স্টুডিও কমান্ড প্রম্পট খোলা।
স্কট

75
@ মেমেট আফের চেষ্টা করে দেখেছি, TlbImp : error TI0000 : The input file 'c:\Program Files\Microsoft SDKs\Windows\ v7.0A\bin\MyLibrary.dll' is not a valid type library.কোন পরামর্শ?
দিনেশকুমার

4
সি ইনপুট ফাইল সি: \ উইন্ডোজ Y SYSTEM32 \ SklServerSpatial.dll 'একটি বৈধ টাইপ লাইব্রেরি নয়
ক্রিস্টিন

7
দীনেশকুমার পন্নুসামির বক্তব্য অনুসারে একই ত্রুটি দয়া করে আমাকে সাহায্য করুন
ডেথ্রেস করুন

4
আপনার কখন টিএলবিএমপি ব্যবহার করা দরকার? সাধারণত ভিএস ২০১৫-এ আপনি যদি রেফারেন্স উইন্ডো থেকে কেবল সিএমএম ডিএলএল-তে রেফারেন্স যুক্ত করেন তবে এটি আপনার জন্য এই সমস্ত যত্ন নেয়।
UuDdLrLrSs

20

আপনি যদি কোনও নেট নেট অ্যাসেম্বলি হয় তবে আপনি কোনও প্রকল্পে একটি ডিএলএল (বা এক্সই) যুক্ত করতে পারেন। যদি তা না হয় তবে আপনি এই ত্রুটি বার্তাটি দেখতে পাবেন।

regsvr32 এছাড়াও ডিএলএলে কাঠামো এবং রফতানি কার্য সম্পর্কে কিছু নির্দিষ্ট ধারণা তৈরি করে। আমি এটি ব্যবহার করার পরে এটি একটি সময় হয়ে গেছে তবে এটি COM সার্ভারগুলির নিবন্ধকরণের সাথে সম্পর্কিত তাই নির্দিষ্ট এন্ট্রি পয়েন্টগুলি উপলব্ধ হওয়া দরকার। যদি Regsvr32 ব্যর্থ হয় তবে DLL সেগুলি প্রবেশের পয়েন্টগুলি সরবরাহ করে না এবং DLL এর কোনও COM উপাদান নেই।

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

আপডেট 12 মার্চ 2018: এমএসডিএন ম্যাগাজিনের লিঙ্কটি আর আগস্ট 2010 এর মতো আগের মতো কাজ করে না J এটি এমএসডিএন ম্যাগাজিনের জুলাই ২০১০ সংখ্যায় প্রকাশিত হয়েছিল। "ওয়েব্যাক মেশিন" -এ মুহুর্তে এখানে নিবন্ধ রয়েছে (ফর্ম্যাটটি সীমিত)। সমগ্র দুটিই MSDN ম্যাগাজিন ইস্যু জুলাই 2010 উপলব্ধ এখানে (HCM বিন্যাস শুধুমাত্র কিভাবে HCM ফাইল ব্যবহার করার জন্য নির্দেশাবলী এখানে )।


সংকলকটি রেফারেন্স না হলেও এমনকি আউটপুট ফোল্ডারে একটি .dll রাখে তা নিশ্চিত করার কোনও উপায় আছে কি?
কাইল

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

উত্তরের জন্য ধন্যবাদ!
কাইল

নিবন্ধটির লিঙ্কটি মারা গেছে।
রওল্ড

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

12

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

এটি আপাতত আমার মূল প্রশ্নের উত্তর বলে মনে হচ্ছে।


আমার ক্ষেত্রে, আমি যে প্রকল্পটির রেফারেন্স দেওয়ার চেষ্টা করছিলাম সেটির জন্য আমাকে আপত্তি ফোল্ডারটি মুছতে হয়েছিল এবং তারপরে আমি প্রকল্পটি পুনর্নির্মাণ করি।
টোলু

7

আপনি যদি কোনও x86 ডিএল রেফারেন্স দেওয়ার চেষ্টা করছেন তবে আপনার সংকলকটি x86 এ সেট করা আছে তা নিশ্চিত করুন ...

আমার অনুরূপ সমস্যা ছিল ... উপরে উল্লিখিত হিসাবে ভিজ্যুয়াল স্টুডিও ২০১২ এর আমার সি # কোড থেকে একটি এক্সেল ফাইল অ্যাক্সেস করতে OLEDB ব্যবহার করার চেষ্টা করছি।

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

ডিবাগ চলাকালীন, এটি আমার উপর ছড়িয়ে পড়ে যে আমি bit৪ বিটের জন্য সংকলন করছি তবে অফিসের x86 বোঝা হয়েছে। যদিও আমি অ্যাক্সেস লাইব্রেরিটি 32 বিটের জন্য লোড করেছি, এটি কখনও অ্যাপ্লিকেশন দ্বারা ব্যবহৃত হচ্ছে না ... এবং তাই, অ্যাক্সেসযোগ্য ছিল না।

এখানে আমি সি # তে যা ব্যবহার করছিলাম:

"সরবরাহকারী = Microsoft.ACE.OLEDB.12.0; ডেটা উত্স =" + #FilePath + "; বর্ধিত বৈশিষ্ট্য = 'এক্সেল 12.0 এক্সএমএল; এইচডিআর = হ্যাঁ'";

... আমি একটি ত্রুটি পেয়েছিলাম

যত তাড়াতাড়ি আমি কম্পাইলারটি x86 এ স্যুইচ করেছিলাম এটি কাজ করে


2

আমি কেবল এই ইস্যুটিতে দৌড়েছি এবং কমান্ড প্রম্পট দিয়ে এটি ঠিক করার বিষয়ে সমস্ত ব্যাখ্যা করার পরে আমি দেখতে পেলাম যে আপনি যদি এটি সরাসরি প্রকল্পে যুক্ত করেন তবে আপনি কেবল প্রতিটি পৃষ্ঠায় প্রয়োজনীয় লাইব্রেরিটি অন্তর্ভুক্ত করতে পারেন


2

আমার প্রকল্পে WinSCard.dll আমদানি করার ক্ষেত্রে আমার একই সমস্যা। আমি সরাসরি ডেল থেকে আমদানি করেই ডিল করি:

[DllImport("winscard.dll")]
public static extern int SCardEstablishContext(int dwScope, int pvReserved1, int pvReserved2, ref int phContext);

[DllImport("winscard.dll")]
public static extern int SCardReleaseContext(int phContext);

আপনি এটি আলাদা প্রকল্পে যুক্ত করতে পারেন এবং তারপরে আপনার মূল প্রকল্প থেকে একটি রেফারেন্স যুক্ত করতে পারেন।


1

সমাধানটি তৈরি করার সময় আমার পিসি পুনরায় চালু হওয়ার পরে আমার এই সমস্যাটি ছিল। আমার দুটি রেফারেন্স চলে গেছে, সুতরাং আমাকে আমার দুটি প্রকল্প ম্যানুয়ালি পুনর্নির্মাণ করতে হবে এবং তারপরে আমি ত্রুটি ছাড়াই উল্লেখগুলি যুক্ত করতে পারি।


1

আপনি একটি নেটিভ ডিএলএল একটি রেফারেন্স যোগ করতে পারবেন না । তবে আপনি এগুলিকে সমাধানে অন্তর্ভুক্ত করতে পারেন (ডান ক্লিক সমাধানে, "বিদ্যমান ফাইল যুক্ত করুন" নির্বাচন করুন), তবে আপনি এর মতো কিছু ঘোষণা না করলে সেগুলি উল্লেখ করা হবে না

[DllImport("...")]
public static extern void MyFunction();

হতে পারে এমন কোনও ধরণের রে પર ডিএলএল রয়েছে, যা আপনি প্রকৃতপক্ষে উল্লেখ করছেন এবং এতে ডিএলএল আমদানি রয়েছে।

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

এই সমস্যাটি হ'ল কারণ আপনি যে সমাবেশটি যুক্ত করার চেষ্টা করছেন সেটি কেবলমাত্র x86 বা x64 প্রসেসরের আর্কিটেকচারের জন্য লক্ষ্যবস্তু এবং সংকলিত ।

বিল্ড -> কনফিগারেশন ম্যানেজারে টার্গেট প্ল্যাটফর্মটি x86 বা x64 এ পরিবর্তন করার চেষ্টা করুন


1

কনফিগারেশন ম্যানেজারে x64 থেকে x86 থেকে আর্কিটেকচার পরিবর্তন করতে হবে এবং আমার 32 বিট dll (সি ভাষা - pcProxAPI.dll) এটি তৈরি করা নতুন ফোল্ডারে কপি করতে হবে .. এটি নীচে "সাশুস" দ্বারা বর্ণিত পদক্ষেপগুলির শীর্ষে রয়েছে ।

সি: \ প্রকল্পসমূহ .. \ বিন \ x86 \ ডিবাগ


এটি তিনি আমার জন্যও ইস্যু করেছিলেন।
দুর্বৃত্ত 39n

তবে ডিফল্টটি যদি x86 বা x64 না হয়? কিন্তু .... "কোনও সিপিইউ" দেখিয়েছে ...?
gumuruh

codeproject.com/articles/1160645/… আপনি সেখানে 32 বিট ডিএল কপি করলে যে কোনও সিপিইউ কাজ করতে পারে
বোটাং

1

আমার নতুন সি # প্রজেক্টে আমি কেবলমাত্র সি ++ তে কোডড করে একটি ডেল যুক্ত করার চেষ্টা করার সময় আমার একই সমস্যা হয়েছিল। আমার ডিলের সি ++ প্রকল্পের বৈশিষ্ট্যগুলি সেট করার জন্য আমার প্রয়োজন আছে:

  • Configuration Properties\General\Common Language Runtime Support: /clr
  • Configuration Properties\C/C++\General\Common Language RunTime Support: /clr

কারণ আমি যে সি # প্রকল্পে এই ডেলটি ব্যবহার করতে চেয়েছিলাম সেটিকেও সেট করা হয়েছিল (একই বৈশিষ্ট্য সেট করা হয়েছিল /clr)।


সমাধান এক্সপ্লোরার> বৈশিষ্ট্য> কনফিগারেশন সম্পত্তি
ইউরেশ করুণনায়কে

@ গুমুরুহ যদি আপনি "ক্লার কি?" বলতে চাইছেন, তবে সিএলআর হ'ল ডকস.মাইক্রোসফট.হেন
ডটনেট /

0

আমিও একই ধরণের সমস্যার মুখোমুখি হয়েছি। আমি একটি নেট নেট ১.১ প্রকল্পে একটি নেট নেট ২২০ ডেলির রেফারেন্স যুক্ত করার চেষ্টা করছিলাম। আমি যখন .dll এর আগের সংস্করণটি যুক্ত করার চেষ্টা করেছি যা। নেট 1.1 মেনে চলছিল। এটা আমার জন্য কাজ করে।


0

এই বিষয়ে সহায়তার সন্ধানের জন্য, বা ফাইলনটফাউন্ডএক্সসেপশন বা ফার্স্টচ্যান্সেপ্সেশন অভিজ্ঞ যে কারও জন্য, আমার উত্তরটি এখানে দেখুন:

'System.IO.FileNotFoundException' টাইপের প্রথম সুযোগের ব্যতিক্রমটি mscorlib.ni.dll - উইন্ডোজ ফোনে ঘটেছে

সাধারণভাবে আপনাকে অবশ্যই নিশ্চিত হতে হবে যে আপনি রেফারেন্সটি তৈরি করার জন্য সমস্ত প্রয়োজনীয়তা পূরণ করছেন - আমি জানি এটি সুস্পষ্ট উত্তর, তবে আপনি সম্ভবত তুলনামূলকভাবে সহজ প্রয়োজনটিকে উপেক্ষা করছেন।


রেফারেন্সের সাথে কাঠামোর সংস্করণগুলির মধ্যে পার্থক্যগুলি দেখুন - একটি নতুন ফ্রেমওয়ার্ক সংস্করণ ব্যবহার করে অনেক সময় কোনও পার্থক্য করা উচিত নয়।
JHaps

0

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

আশা করি এই সমাধানটি আপনার পক্ষে কাজ করে।


0

সাধারণত ভিজুয়াল স্টুডিও 2015 তে আপনার dll প্রকল্পটি সি ++ -> সিএলআর প্রকল্প হিসাবে ভিজ্যুয়াল স্টুডিওর টেমপ্লেটগুলি থেকে তৈরি করা উচিত তবে আপনি প্রযুক্তিগতভাবে এটিকে সক্ষম করতে পারবেন:

সমালোচনামূলক সম্পত্তিটিকে Common Language Runtime Supportআপনার প্রকল্পের কনফিগারেশনে সেট বলা হয় । এটি অধীনে পাওয়া যায় Configuration Properties > General > Common Language Runtime Support

এটি করার সময়, ভিএস সম্ভবত 'টার্গেট। নেট ফ্রেমওয়ার্ক' বিকল্পটি আপডেট করবে না (এটি পছন্দ করা উচিত)। আপনি নিজের প্রকল্পটি আনলোড, আপনার_প্রজেক্ট.এক্সএক্সপ্রজ ফাইলটি সম্পাদনা করে এবং Target .NET framework Versionএক্সএমএল ট্যাগ যুক্ত / আপডেট করে ম্যানুয়ালি এটিকে যুক্ত করতে পারেন ।

একটি নমুনার জন্য, আমি সি ++ সিএলআর প্রকল্প হিসাবে একটি নতুন সমাধান তৈরি করার এবং সেখানে এক্সএমএল পরীক্ষা করার পরামর্শ দিচ্ছি, সম্ভবত এটির চেয়ে আলাদাও রয়েছে যা সাধারণের বাইরে খুব গুরুত্বপূর্ণ কিছু নেই তা নিশ্চিত করার জন্য এটি পৃথক করে।


0

আমার উত্তরটি কিছুটা দেরিতে, তবে দ্রুত পরীক্ষা হিসাবে নিশ্চিত করুন যে আপনি গ্রন্থাগারের সর্বশেষতম সংস্করণটি ব্যবহার করছেন।

আমার ক্ষেত্রে এমন নুগেট লাইব্রেরি আপডেট করার পরে যা সমস্যা দেখা দিচ্ছিল এমন অন্য লাইব্রেরিটি উল্লেখ করেছিল।


0

আপনি ম্যানুয়ালি .dll ফাইল যুক্ত করতে পারেন। উদাহরণস্বরূপ আপনি যদি আপনার ডাব্লুপিএফ অ্যাপ্লিকেশনটিতে একটি dll ফাইল যুক্ত করতে চান এবং আপনি এটি আপনার প্রকল্পে উল্লেখ করতে অক্ষম হন

(ত্রুটি পেতে: ".... dll" এর একটি রেফারেন্স যোগ করা যায়নি lease অনুগ্রহ করে নিশ্চিত হয়ে নিন যে ফাইলটি অ্যাক্সেসযোগ্য এবং এটি একটি বৈধ সমাবেশ বা সিওএম উপাদান)

তারপরে ফাইলটি কপি করুন এবং ইনস্টলারের প্রকল্পে (অ্যাপ্লিকেশন ফোল্ডারে) পাস করুন।


0
  1. cmd.exe শুরু করুন এবং টাইপ করুন:
  2. Regsvr32% dllpath%
  3. "% dllpath%" আপনার dll পথে প্রতিস্থাপন করে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.