আমি "প্রসেসরের আর্কিটেকচারের মধ্যে মিল নয়" ভিজ্যুয়াল স্টুডিও সংকলন ত্রুটিটি কীভাবে ঠিক করব?


458

আমি ভিজ্যুয়াল স্টুডিও ২০১০-তে প্রকল্পের কনফিগারেশনে নতুন আছি, তবে আমি কিছু গবেষণা করেছি এবং এখনও এই সমস্যাটি বেশ বের করে আনতে পারি না। আমার কাছে সি + ডিএলএল রেফারেন্সিং সহ সি ++ ডিএলএল সহ একটি ভিজ্যুয়াল স্টুডিও সমাধান রয়েছে। সি # ডিএলএল কয়েকটি অন্যান্য ডিএলএল উল্লেখ করে, কিছু আমার প্রকল্পের মধ্যে এবং কিছু বাহ্যিক। আমি যখন সি ++ ডিএলএল সংকলনের চেষ্টা করি তখন আমি এই সতর্কতাটি পাই:

সতর্কতা এমএসবি 3270০: "এমএসআইএল" প্রকল্পের প্রসেসর আর্কিটেকচার এবং রেফারেন্সের প্রসেসরের আর্কিটেকচার "[অভ্যন্তরীণ সি # ডিএল]", "x86" নির্মাণের মধ্যে একটি অমিল রয়েছে।

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

আমি যখন কনফিগারেশন ম্যানেজারের দিকে তাকাব তখন এটি আমার সি # ডিএলএলটির x86 হিসাবে এবং আমার সি ++ প্রকল্পের জন্য উইন 32 হিসাবে প্ল্যাটফর্ম দেখায়। এটি সঠিক সেটআপ মত মনে হচ্ছে; অবশ্যই আমি চাই না যে আমার সি ++ প্রজেক্টের প্ল্যাটফর্মটি x64 এ সেট করা হোক, যা কেবলমাত্র অন্য একটি বিকল্প উপস্থাপিত।

আমি এখানে কি ভুল করছি?


আপনি কোনও সিপিইউতে পরিবর্তন করলে বিশেষত অভিযোগ কী?
লর্ডচিটো

2
আমার কাছে একটি প্রস্তাবিত পরামর্শ দেওয়ার জন্য পর্যাপ্ত তথ্য নেই তবে আপনার সমাধান -> প্রকল্প বিল্ড অর্ডারটিতে ডান ক্লিক করুন এবং নিশ্চিত করুন যে আপনার সি # প্রকল্পটি সি ++ প্রকল্পের আগে নির্মিত হচ্ছে। যদি তা না হয় তবে নির্ভরতা ট্যাবে যান এবং ভিএসকে জানান যে C ++ প্রকল্প সি # প্রকল্পের উপর নির্ভর করে।
লর্ডচিটো

2
ভিজ্যুয়াল স্টুডিও এটি আবার ক্রেপ হয়। আমার স্ক্রিনের শীর্ষে প্ল্যাটফর্মটি x64 বলেছে তবে সতর্কতাটি বলেছে যে প্রকল্পটি নির্মিত হচ্ছে "এমএসআইএল"। সুতরাং ভিজ্যুয়াল স্টুডিও আমাকে বলছে যে আমি যখন আপেল ব্যবহার করছি না তখন আপেল এবং কমলাগুলির মধ্যে অমিল রয়েছে। আমরা কি ভিজ্যুয়াল স্টুপিডোটির নাম পরিবর্তন করতে পারি?
পল ম্যাকার্থি

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

সংক্ষিপ্ত উত্তরটি হল যদি আপনার প্রকল্পের x86 বা x64 এর উপর নির্ভরতা থাকে তবে আপনি কোনও সিপিইউ (যা কেবল খাঁটি। নেট অ্যাপ্লিকেশনগুলির জন্য) ব্যবহার করতে পারবেন না। সুতরাং আপনাকে কোনও সিপিইউ নয়, এক্স 64 বা এক্স 32 এর জন্য তৈরি করতে হবে। এটি ডেভের উত্তর
জার্ক

উত্তর:


512

এই সতর্কতাটি নতুন ভিজ্যুয়াল স্টুডিও 11 বিটা এবং .NET 4.5 দিয়ে প্রবর্তিত হয়েছে বলে মনে হয়, যদিও আমি মনে করি এটি সম্ভবত আগে সম্ভব হত।

প্রথমত, এটি সত্যিই কেবল একটি সতর্কতা। আপনি যদি মাত্র x86 নির্ভরতা নিয়ে কাজ করে থাকেন তবে এটির কোনও ক্ষতি হবে না। মাইক্রোসফ্ট কেবল আপনাকে সতর্ক করার চেষ্টা করছে যখন আপনি উল্লেখ করেন যে আপনার প্রকল্পটি "যে কোনও সিপিইউ" এর সাথে সামঞ্জস্যপূর্ণ তবে আপনি কোনও প্রকল্প বা .dll সমাবেশের উপর নির্ভরতা রাখবেন যা হয় x86 বা x64। আপনার একটি x86 নির্ভরতা রয়েছে বলে প্রযুক্তিগতভাবে আপনার প্রকল্পটি "কোনও সিপিইউ" উপযুক্ত নয়। সতর্কবার্তাটি দূরে রাখতে, আপনার প্রকল্পটি আসলে "যে কোনও সিপিইউ" থেকে "x86" এ পরিবর্তন করা উচিত to এটি করা খুব সহজ, এখানে পদক্ষেপগুলি দেওয়া হচ্ছে।

  1. বিল্ড | কনফিগারেশন ম্যানেজার মেনু আইটেমটিতে যান।
  2. আপনার প্রকল্পটি তালিকায় সন্ধান করুন প্ল্যাটফর্মের অধীনে এটি "যে কোনও সিপিইউ" বলবে
  3. ড্রপ ডাউন থেকে "যে কোনও সিপিইউ" বিকল্পটি নির্বাচন করুন এবং তারপরে নির্বাচন করুন <New..>
  4. সেই কথোপকথন থেকে, "নতুন প্ল্যাটফর্ম" ড্রপ ডাউন থেকে x86 নির্বাচন করুন এবং নিশ্চিত করুন যে "যে কোনও সিপিইউ" "সেটিং থেকে অনুলিপি করুন" ড্রপ ডাউন-এ নির্বাচিত হয়েছে।
  5. ঠিক আছে আঘাত
  6. আপনি উভয় ডিবাগ এবং প্রকাশের কনফিগারেশনের জন্য x86 নির্বাচন করতে চাইবেন।

এটি সতর্কবাণীটিকে দূরে সরিয়ে দেবে এবং এও জানিয়ে দেবে যে আপনার সমাবেশ বা প্রকল্পটি এখন "কোনও সিপিইউ" উপযুক্ত নয় তবে এখন x86 নির্দিষ্ট। আপনি যদি একটি 64 বিট প্রকল্প তৈরি করছেন যা একটি x 64 নির্ভরতা রয়েছে তা এটি প্রযোজ্য; আপনি পরিবর্তে x64 নির্বাচন করবেন।

অন্য একটি নোট, প্রকল্পগুলি খাঁটি। নেট প্রকল্পগুলি হলে সাধারণত "যে কোনও সিপিইউ" উপযুক্ত হতে পারে। আপনি যদি নির্ভরশীলতা (তৃতীয় পক্ষের dll বা আপনার নিজস্ব সি ++ পরিচালিত প্রকল্প) প্রবর্তন করেন যা কোনও নির্দিষ্ট প্রসেসরের আর্কিটেকচারকে লক্ষ্য করে তখনই এই সমস্যাটি উপস্থিত হয়।


3
আমি সবেমাত্র ভিজ্যুয়াল স্টুডিও ২০১২ এর আরটিডাব্লু ইনস্টল করেছি এবং একটি প্রিসিস্টিং ২০১০ সমাধান খুললাম এবং একই সতর্কতাটি দেখতে শুরু করেছি, সুতরাং এটি এমন কিছু যা এখনও আরটিডব্লুতে বিদ্যমান রয়েছে।
টড থমসন

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

6
এটি খুব ভাল কিছু আঘাত করতে পারে। কোনও সিপিইউ এক্সিম একটি 64 বিট ওএসে x64 হিসাবে লোড করবে এবং x86 ডিএলএস লোড করতে অক্ষম হবে। সুতরাং যদি আপনার কোনও নির্দিষ্ট প্ল্যাটফর্মে নির্ভরতা থাকে তবে আপনার প্ল্যাটফর্মটি সঠিকভাবে সেট করা উচিত।
ইয়াউর

1
বিল্ড মেনুটি ভিএস সি # 2010 এক্সপ্রেসে অনুপস্থিত বলে মনে হচ্ছে। আমি কিভাবে এটি পেতে পারি? আমি আশা করি তারা জিনিস গোপন না করে।
Xonatron

1
কীভাবে ভিজ্যুয়াল স্টুডিও 2010 এক্সপ্রেসে বিল্ড মেনু সক্ষম করতে হবে তা সন্ধান করে: সরঞ্জাম মেনু -> সেটিংস -> 'বিশেষজ্ঞ সেটিংস' নির্বাচন করুন
Xonatron

144

এটি একটি অত্যন্ত জেদী সতর্কতা এবং এটি একটি বৈধ সতর্কতা হওয়ার পরেও এমন কিছু মামলা রয়েছে যেখানে তৃতীয় পক্ষের উপাদান ব্যবহার এবং অন্যান্য কারণে এটি সমাধান করা যায় না। আমার অনুরূপ ইস্যুটি ব্যতীত এই সতর্কতাটি হ'ল কারণ আমার প্রকল্পগুলির প্ল্যাটফর্মটি কোনও এসিপিইউ এবং আমি এএমডি 6464 এর জন্য নির্মিত একটি এমএস গ্রন্থাগারটি উল্লেখ করছি। এটি ভিজ্যুয়াল স্টুডিও 2010-এ রয়েছে এবং ভিএস2012 এবং। নেট 4.5 ইনস্টল করে এটি প্রবর্তিত বলে মনে হয়।

যেহেতু আমি উল্লেখ করছি যে এমএস গ্রন্থাগারটি আমি পরিবর্তন করতে পারছি না এবং যেহেতু আমি জানি যে আমার লক্ষ্য স্থাপনার পরিবেশটি কেবলমাত্র 64৪-বিট হবে তাই আমি নিরাপদে এই সমস্যাটিকে উপেক্ষা করতে পারি।

সতর্কতা সম্পর্কে কি? মাইক্রোসফ্ট এর প্রতিক্রিয়া পোস্ট একটি সংযুক্ত প্রতিবেদনের করেছে যে সেই সতর্কতাটি অক্ষম করার একটি বিকল্প। আপনার কেবল এটি করা উচিত আপনার সমাধান আর্কিটেকচার সম্পর্কে আপনি খুব সচেতন এবং আপনি আপনার স্থাপনার লক্ষ্যটি পুরোপুরি বুঝতে পেরেছেন এবং জানেন যে এটি সত্যিকারের বিকাশের পরিবেশের বাইরে কোনও সমস্যা নয়।

আপনি আপনার প্রকল্পের ফাইলটি সম্পাদনা করতে পারেন এবং এই সম্পত্তি গোষ্ঠীটি এবং সতর্কতাটি অক্ষম করতে সেট করতে পারেন:

<PropertyGroup>
  <ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>None</ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>
</PropertyGroup>

1
মাইক্রোসফ্ট। নেট ফ্রেমওয়ার্ক 4.5 আরসি রেডমে ফাইলটিতে এই সমাধানটির জন্য কেবলমাত্র অন্যান্য সরকারী এমএস রেফারেন্সই দেখেছি । আশ্চর্যের বিষয় হল এটি আরটিএম রিডমে ফাইল থেকে সরানো হয়েছে।
জনসি

4
এটি কাজ করে, তবে সতর্কতার পরিবর্তনের জন্য নয়: "রেফারেন্স করা সমাবেশ ... অ্যাপ্লিকেশনটির চেয়ে আলাদা প্রসেসরকে লক্ষ্য করে"। যদি এই সতর্কতার জন্য অনুরূপ কোনও ব্যবস্থা থাকে তবে এটি দুর্দান্ত হবে?
জিমি

6
"আমার প্রকল্পগুলির প্ল্যাটফর্মটি অ্যানিসিপিইউ এবং আমি এএমডি for64 এর জন্য নির্মিত একটি এমএস গ্রন্থাগার উল্লেখ করছি" ... এটি ভুল। যেহেতু আপনার লক্ষ্য মোতায়েন সর্বদা 64৪-বিট থাকে তাই আপনি আপনার প্ল্যাটফর্মটি x64 এ সেট করতে পারেন যা আপনার -৪-বিট অনুমানটি যদি কখনও লঙ্ঘিত হয় এবং সতর্কতাটি প্রতিরোধ করে তবে এটি আরও উপযুক্ত ত্রুটি তৈরি করে।
বেন ভয়েগট 21'15

2
@ বেনভয়েগ থিওরিতে একটি দুর্দান্ত ধারণা, তবে ভিএস একটি x86 প্রক্রিয়া হওয়ায় উইন্ডোজ ফর্ম ডিজাইনারের মতো স্টাফ চালানোর জন্য x86 বিল্ড কন্ট্রোল দরকার, এমনকি যদি আপনার অ্যাপ্লিকেশনটি কেবলমাত্র 64 বিট হয়ে যায়। এটি একটি বৈধ, তবে একটি মিথ্যা "যে কোনও সিপিইউ" বিল্ড ব্যবহার করার দুর্ভাগ্যজনক কারণ।
জুন

1
@jrh: তারপর একটি ডিএলএল প্রকল্পে গুই করা, এবং বিল্ড যে AnyCPU হিসাবে। দেশীয় নির্ভরতাগুলির সাথে মেলে জন্য সঠিক আর্কিটেকচারের সাথে EXE চিহ্নিত করা দরকার। যুক্তি থেকে জিইউআইকে যথাযথভাবে বিচ্ছিন্ন করা অনেক বেশি এগিয়ে যায় (যদিও এর এখনও এর সীমাবদ্ধতা রয়েছে যেমন দেশীয় কোডটি জিইউআইয়ের অংশ উপস্থাপন করছে, তবে ডিজাইনার সমর্থন হ'ল কারণ যদি আপনি উভয়ের জন্য পুরো প্রকল্প তৈরি না করেন) x86 এবং x64)
বেন ভয়েট

61

থাম্বের একটি ভাল নিয়ম হ'ল "ওপেন ডিএলএল, ক্লোজড এক্সইএস", এটি হল:

  • এক্সই x86 বা x64 নির্দিষ্ট করে ওএসকে লক্ষ্যবস্তু করে।
  • ডিএলএল খোলা ফেলে রাখা হয় (অর্থাত, AnyCPU) যাতে তারা একটি 32 বিট বা 64 বিট প্রক্রিয়া মধ্যে instantiated করা যেতে পারে।

আপনি যখন কোনও এসিপিইউ হিসাবে একটি এক্সইইইউ নির্মাণ করেন, আপনি যা করছেন তা সমস্ত OS- তে কী প্রক্রিয়াটি বেনিফিট করার বিষয়ে সিদ্ধান্ত স্থগিত করে যা EXE কে তার পছন্দ অনুসারে জিত করবে। অর্থাত, একটি x64 ওএস একটি 64-বিট প্রক্রিয়া তৈরি করবে, একটি x86 ওএস 32-বিট প্রক্রিয়া তৈরি করবে।

AnyCPU হিসাবে DLL গুলি তৈরি করা তাদের উভয় প্রক্রিয়ার সাথে সামঞ্জস্যপূর্ণ করে তোলে।

সমাবেশ লোডিংয়ের সূক্ষ্মতা সম্পর্কে আরও জানতে এখানে দেখুন । এক্সিকিউটিভ সংক্ষিপ্তসার কিছু পড়তে:

  • যে কোনও সিসিপিইউ - আমন্ত্রণমূলক প্রক্রিয়ার উপর নির্ভর করে x64 বা x86 সমাবেশ হিসাবে লোড হয়
  • x86 - x86 সমাবেশ হিসাবে লোড; একটি x64 প্রক্রিয়া থেকে লোড করা হবে না
  • x64 - এক্স 64 সমাবেশ হিসাবে লোড; কোনও x86 প্রক্রিয়া থেকে লোড হবে না

4
এই নিয়মটি আমার কাছে বোধগম্য। তবে নীচের পরিস্থিতিটি বিবেচনা করুন: নেটবি.ডেল (যে কোনও সিপিইউ) নেটবি.ডিএল (যে কোনও সিপিইউ) দ্বারা অ্যাপ্লিকেশন .1.xe (x64) দ্বারা ব্যবহৃত নেটিভ.ডিল (x64) ব্যবহার করুন। এখানে কোন আসল সমস্যা নেই, তবে নেটএ.ডি.এল.পি. সংকলন আমাকে সতর্কতা দেয়। ঠিক আছে, যেহেতু এই সমাবেশটি সরাসরি নেটিভ.ডিলের উপর নির্ভর করে তাই আমি এটিকে x64 হিসাবে চিহ্নিতও করতে পারি। কিন্তু তারপরে নেটব.ডিল সংকলন করে অভিযোগ জানায়। আমি নেটবি.ডেলকে "যেকোন সিপিইউ" হিসাবে রাখতে চাই কারণ এটি একটি সাধারণ, ভিন্ন, খাঁটি-ডট-নেট অ্যাপ্লিকেশনটিতে ব্যবহৃত হয় assembly আমি উপসংহারে এসেছি যে আমার একমাত্র বিকল্প হ'ল সতর্কতা দমন / উপেক্ষা করা। হ্যাঁ?
স্টিভ রবিনস

2
নেটিভ.ডল-এর উপর নির্ভরতার কারণে, আপনার পুরো অ্যাপ্লিকেশন / এসেম্বলির বংশটি এখন x64, আপনার সতর্কতাটি চাপা দেয় কিনা। দমন যখন আপনার দৃশ্যে কাজ করে, ভবিষ্যতে উদ্ভট পরিস্থিতি দেখা দিতে পারে। উদাহরণস্বরূপ, 1) সমাবেশ নেটবি একটি x86 পরিবেশে ব্যবহৃত হয়, যেখানে নেটিভেক্স 64 লোড হবে না, বা 2) আপনার গ্রাহক App1.exe এর একটি x86 সংস্করণ চান এবং আপনি খুশিভাবে সংকলন করেছেন, যেহেতু নেটবিকে কোনও সিপিইউ হিসাবে চিহ্নিত করা হয়েছে, তবে আবার, স্ট্যাকের শীর্ষে নেটিভেক্স 64৪ লোড হবে না
গুস্তাভো মরি

যদিও গুস্তাভোর নিয়ম একটি ভাল নীতি, যদিও এই প্রশ্নটিতে জিজ্ঞাসা করা নির্দিষ্ট সমস্যার জন্য এটি ব্যবহার করা যাবে না কারণ প্রকল্পটি ইতিমধ্যে তৃতীয় পক্ষের বিধানসভার উপর নির্ভরশীলতা রয়েছে যা নিয়মটি অনুসরণ করে না (এটি x86, কোনও এসিপিইউ নয়)। অতএব যতক্ষণ নির্ভরতা থাকবে ততক্ষণ প্রকল্পগুলির পুরো চেইনকে x86 এবং অন্য কিছুই লক্ষ্য করতে হবে।
ডেভিড বার্গ

23

সি # ডিএলএল প্ল্যাটফর্ম লক্ষ্য x86 এর সাথে সেট আপ করা হয়েছে

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

ডিএলএলগুলির কোনও বিকল্প নেই, তাদের প্রক্রিয়া সাক্ষরতার সাথে সামঞ্জস্য করা দরকার। যদি সেগুলি না হয় তবে আপনার কোডগুলি সেগুলি ব্যবহার করার চেষ্টা করার পরে আপনি একটি ব্যাডিম্যাজ ফরমেট এক্সেকশন সহ একটি বড় কাবুম পাবেন।

সুতরাং ডিএলএলগুলির জন্য একটি ভাল নির্বাচন কোনও এসিপিইউ হয় তাই তারা যেভাবেই কাজ করে। C # এর ডিএলএল জন্য ইন্দ্রিয় করে নির্মিত হয় প্রচুর, তারা কি কাজ উভয় ক্ষেত্রেই। তবে নিশ্চিত, আপনার সি ++ / সিএলআই মিশ্র মোড ডিএলএল নয়, এতে অব্যবহৃত কোড রয়েছে যা প্রক্রিয়াটি 32-বিট মোডে চললে কেবল কার্যকরভাবে কাজ করতে পারে। আপনি পারেনসে সম্পর্কে সতর্কতা উত্পন্ন বিল্ড সিস্টেমটি পেতে । আপনি ঠিক কি পেয়েছেন। কেবল সতর্কতা, এটি এখনও সঠিকভাবে তৈরি করে।

শুধু সমস্যা punt। এক্সের প্রকল্পের প্ল্যাটফর্ম লক্ষ্যটি x86 এ সেট করুন, এটি অন্য কোনও সেটিংসের সাথে কাজ করছে না। এবং কেবলমাত্র সমস্ত ডিএলএল প্রকল্প যেকোনও সিসিইউতে রাখুন।


1
সুতরাং, স্পষ্টরূপে: আমি EXE তৈরি করছি না, আমি অন্য কারোর এক্সই দিয়ে চালানোর জন্য একটি ডিএলএল তৈরি করছি। যে কোনও সিপিইউতে সি # ডিএলএল এর প্ল্যাটফর্ম টার্গেট পরিবর্তন করা সতর্কতাটি সরিয়ে দেয় না। আমি ভাবছি যে এটি কানেক্ট.মাইক্রোসফট / ভিজ্যুয়াল স্টুডিও / ফেডব্যাক / ডেটেলস / 90২৮৯০১/২ এর ক্ষেত্রে যদি হয় - তবে আমি নিজেই এই সতর্কতাটি উপেক্ষা করব তবে আসলে এএসইই সি # ডিএলএল লোড করতে সক্ষম তবে সি ++ ডিএলএল নয় সুতরাং আমি মনে করি এটি একটি আসল সমস্যা।
পল ইস্টলন্ড

আপনি কি আসলে ভিএস 2010 ব্যবহার করছেন? আপনি সি ++ / সিএলআই ডিএলএল লোড করতে পারবেন না তা মোটেই পরিষ্কার ছিল না। ডায়াগনস্টিক কী? এই প্রয়োজনীয় তথ্য দিয়ে আপনার প্রশ্নগুলি আপডেট করুন।
হ্যানস প্যাস্যান্ট

লোড ব্যর্থতা সম্পর্কে পোস্ট করা হয়নি কারণ আমি এটি সংযুক্ত কিনা 100% নিশ্চিত ছিলাম না, এবং আরও ডিবাগিংয়ের সময় এটি না হয়ে দেখা দেয়। আমি ভিএস 2010 ব্যবহার করছি। আপডেট হওয়া প্রশ্নের পাঠ্য। বিভ্রান্তির জন্য খুব দুঃখিত
পল ইস্টলন্ড

1
আপনি ডিএলএল লোড সম্পর্কিত কোনও ধরণের ত্রুটি বা ব্যতিক্রম দলিল করেন নি। আপনি যা জানেন আমাকে তা না বললে আমি আপনাকে সহায়তা করতে পারি না। এর সাথে শুভকামনা রইল।
হ্যানস প্যাস্যান্ট

5

আমি একই সতর্কতা পেয়েছিলাম যা আমি এটি করেছি:

  1. প্রকল্পটি আনলোড করুন
  2. প্রকল্পের বৈশিষ্ট্যগুলি যেমন .csproj সম্পাদনা করুন
  3. নিম্নলিখিত ট্যাগ যুক্ত করুন:

    <PropertyGroup>
        <ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>
            None
        </ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>
    </PropertyGroup>
  4. প্রকল্পটি পুনরায় লোড করুন


2
এটি সমস্যার সমাধান করছে না। এটি কেবলমাত্র নির্দিষ্ট প্রকল্পের জন্য সতর্কতাটি অক্ষম করে। তবে কিছু ক্ষেত্রে আমি এটির একটি বৈধ সমাধান খুঁজে পাই। ধন্যবাদ!
ক্ষুদ্র

4

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

আমি তখন রেফারেন্সড প্রজেক্টের সিএসপিজে দেখলাম এবং এটি পেয়েছি:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<PlatformTarget>x64</PlatformTarget>

কোনওরকমভাবে এই প্ল্যাটফর্মট্যারেটটি একটি কনফিগার পরিবর্তনের মাঝখানে যুক্ত হয়েছিল এবং IDE এটি দেখে নি বলে মনে হয়।

রেফারেন্সড প্রকল্প থেকে এই লাইনটি সরিয়ে দেওয়া আমার সমস্যার সমাধান করেছে।


এটি বের করতে আমার পুরো দিন লেগেছিল। অনেক ধন্যবাদ! :)
সোহমসি

3

যদি আপনার সি # ডিএলএল এর x86- ভিত্তিক নির্ভরতা থাকে, তবে আপনার ডিএলএল নিজেই x86 হতে চলেছে। আমি সত্যিই এর কাছাকাছি কোনও উপায় দেখতে পাচ্ছি না। ভিএস এটিকে (উদাহরণস্বরূপ) x64 এ পরিবর্তন করার বিষয়ে অভিযোগ করে কারণ একটি 64-বিট এক্সিকিউটেবল 32-বিট লাইব্রেরি লোড করতে পারে না।

আমি সি ++ প্রকল্পের কনফিগারেশনটি সম্পর্কে কিছুটা বিভ্রান্ত। এই বিল্ডটির জন্য যে সতর্কতা বার্তা সরবরাহ করা হয়েছিল তা থেকে বোঝা যায় যে এটি যে কোনও সিসিপিইউ-র জন্য লক্ষ্যবস্তু হয়েছিল, কারণ এটি প্ল্যাটফর্মটি জানিয়েছে যে এটি লক্ষ্যযুক্ত ছিল [এমএসআইএল], তবে আপনি ইঙ্গিত করেছেন যে প্রকল্পের কনফিগারেশনটি আসলে উইন 32 ছিল। একটি নেটিভ উইন 32 অ্যাপ্লিকেশনটি এমএসআইএলকে জড়িত করা উচিত নয় - যদিও এটি কোনও সি # লাইব্রেরির সাথে ইন্টারঅ্যাক্ট করছে তবে এটির জন্য সিএলআর সমর্থন সক্ষম করা দরকার। সুতরাং আমি মনে করি তথ্যের দিকটিতে কয়েকটি ফাঁক রয়েছে।

আমি কি আপনাকে শ্রদ্ধার সাথে পর্যালোচনা জিজ্ঞাসা করতে এবং প্রকল্পগুলির সঠিক কনফিগারেশন এবং সেগুলি কীভাবে আন্তঃসম্পর্কিত তার আরও কিছু বিশদ পোস্ট করতে চাইতে পারি? সম্ভব হলে আরও সাহায্য করতে পেরে খুশি হন।


3

ডেভিড স্যাক্স উত্তর ছাড়াও, আপনাকে Buildট্যাবটিতে যেতে হবে Project Propertiesএবং যে প্রকল্প আপনাকে এই সতর্কতা দিচ্ছে তার জন্য প্রস্তুত Platform Targetহতে পারে x86। যদিও আপনি এটি আশা করতে পারেন, কনফিগারেশন ম্যানেজারের মধ্যে এই সেটিংটি পুরোপুরি সিঙ্ক্রোনাইজড বলে মনে হচ্ছে না।


2

সি # প্রকল্পের জন্য, x86 এর লক্ষ্যটি যা মনে হয় তা করে। এটি বলে যে এই সমাবেশটি কেবলমাত্র x86 আর্কিটেকচারকে সমর্থন করে। অনুরূপভাবে x64 এর জন্য। অন্যদিকে যে কোনও সিপিইউ বলে যে কোন আর্কিটেকচারের আমি যত্ন করি না, আমি উভয়কেই সমর্থন করি। সুতরাং, পরবর্তী 2 টি প্রশ্ন হ'ল (1) এক্সিকিউটেবলের কনফিগারেশন যা এই ডলগুলি ব্যবহার করে? এবং (2) কি সাক্ষ্য কীআপনার ওএস / কম্পিউটারের? আমি জিজ্ঞাসার কারণটি হ'ল কারণ যদি আপনার এক্সিকিউটেবলটি -৪-বিটে চালিত করার জন্য সংকলিত হয়, তবে এটি সমস্ত নির্ভরতাও 64৪-বিট মোডে চালাতে সক্ষম হতে হবে। আপনার যে কোনও সিপিইউ অ্যাসেম্বলি লোড হতে সক্ষম হওয়া উচিত, তবে সম্ভবত এটি এমন কিছু অন্যান্য নির্ভরতা উল্লেখ করছে যা কেবলমাত্র x86 কনফিগারেশনে চালাতে সক্ষম। আপনি যদি 64-বিট মোডে এক্সিকিউটেবল চালনার পরিকল্পনা করেন তবে সবকিছুই "যে কোনও সিপিইউ" বা "x64" রয়েছে তা নিশ্চিত করার জন্য সমস্ত নির্ভরতা এবং নির্ভরতা-নির্ভরতাগুলি পরীক্ষা করুন। অন্যথায়, আপনি সমস্যা আছে।

বিভিন্ন উপায়ে, ভিজ্যুয়াল স্টুডিও কোনও সিপিইউ এবং বিভিন্ন আর্কিটেকচার নির্ভরশীল সমাবেশগুলির মিশ্রণটি সহজতর করে না। এটি করণীয়, তবে প্রায়শই এটির প্রয়োজন হয় যে কোনও অ্যাসেমব্লির অন্যথায় "যে কোনও সিপিইউ" হতে হবে x86 এবং x64 এর জন্য আলাদাভাবে সংকলন করতে হবে কারণ কিছুটা নির্ভরতা-এর-নির্ভরতার দুটি সংস্করণ রয়েছে।


কেবলমাত্র ডিএলএল তৈরির চেষ্টা করতে গিয়ে আমি ব্যর্থতা পাওয়ায় নির্বাহযোগ্য পদার্থের কনফিগারেশনটি কি প্রাসঙ্গিক? (যদিও এটি x86)) আমার কম্পিউটারটি x64।
পল ইস্টলন্ড

2
কোন কার্যনির্বাহী ব্যবহার করা হবে তা নির্ধারণ করে এটি নির্বাহযোগ্য । এক্সিকিউটেবলটি যদি এক্স 64 হিসাবে চলমান থাকে, তবে এটি যে কোনও কিছু লোড করে (প্রত্যক্ষ বা পরোক্ষভাবে) অবশ্যই x64 বা যেকোন সিপিইউ হতে হবে। এক্সিকিউটেবল যদি x86 হিসাবে চলমান থাকে তবে কিছু বোঝা (প্রত্যক্ষ বা পরোক্ষভাবে) অবশ্যই x86 বা যেকোন সিপিইউ হতে হবে।
জোনাথন ডিকার্লো

1

আমি এর আগেও একই রকম সমস্যা ছিলাম, বিশেষত শেয়ার পয়েন্টের মতো বিদ্যমান এক্স 6464 টি সমাধানে একটি পরীক্ষা সমাধান যুক্ত করার সময়। আমার ক্ষেত্রে এটি মনে হয় যে ডিফল্টরূপে নির্দিষ্ট প্রকল্পের টেম্পলেটগুলি নির্দিষ্ট প্ল্যাটফর্ম হিসাবে যুক্ত করা হয়।

এই সমাধানটি যা প্রায়শই আমার জন্য কাজ করে: কনফিগারেশন ম্যানেজারে সবকিছু সঠিক প্ল্যাটফর্মে সেট করুন (সক্রিয় কনফিগারেশন ড্রপ-ডাউন, ডাবগ সাধারণত বলে, এটিতে যাওয়ার একটি ভাল উপায়) এবং প্রকল্প প্ল্যাটফর্ম (প্রকল্পের বৈশিষ্ট্যগুলিতে), তারপরে বিল্ড করুন, তারপরে সবকিছুকে যেকোনো সিপিইউতে সেট করুন। কখনও কখনও আমাকে কিছু নির্ভরতা (প্রতিটি প্রকল্পের বৈশিষ্ট্যগুলিতে DLLs) সরিয়ে আবার পুনরায় যুক্ত করতে হয় এবং কখনও কখনও "32 বিট বা bit৪ বিট প্রসেসে পরীক্ষা চালান" (লোকাল.স্টেটেটিংগুলিতে ডাবল ক্লিক করুন এবং হোস্টে যান) পরিবর্তন করতে হবে।

আমার কাছে মনে হচ্ছে এটি কেবল কিছু সেট করে আবার সেট করে দিচ্ছে, তবে আমি যে দৃশ্যগুলি দেখছি না তার পিছনে সম্ভবত আরও কিছু চলছে। যদিও এটি অতীতে আমার জন্য মোটামুটি ধারাবাহিকভাবে কাজ করেছে।


1

আমার প্রকল্পের জন্য, আমার এক্স x86 এবং x64 উভয়ই তৈরি করতে সক্ষম হওয়া প্রয়োজন। এর সাথে সমস্যাটি হ'ল যখনই আপনি একটি ব্যবহার করার সময় রেফারেন্স যুক্ত করেন, তখন অন্যটি তৈরি করার সময় এটি অভিযোগ করে।

আমার সমাধান হ'ল ম্যানুয়ালি * .csproj ফাইলগুলি সম্পাদনা করা যাতে লাইনগুলি এর মতো করে:

<Reference Include="MyLibrary.MyNamespace, Version=1.0.0.0, Culture=neutral, processorArchitecture=x86"/>

<Reference Include="MyLibrary.MyNamespace, Version=1.0.0.0, Culture=neutral, processorArchitecture=AMD64"/>

<Reference Include="MyLibrary.MyNamespace, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"/>

এটিতে পরিবর্তন করুন:

<Reference Include="MyLibrary.MyNamespace, Version=1.0.0.0, Culture=neutral"/>

1

আমার একই সমস্যা ছিল এটি এমএস ইউএনআইটি টেস্ট ডিএলএল দ্বারা হয়েছিল। আমার ডাব্লুপিএফ অ্যাপ্লিকেশনটি x86 হিসাবে ইউনিট টেস্ট ডিএলএল (রেফারেন্সড এক্সইএই ফাইল) হিসাবে "যে কোনও সিপিইউ" হিসাবে সংকলিত হয়েছিল। আমি ইউনিট টেস্ট ডিএলএলকে x86 (EXE এর মতো) এর জন্য সংকলন করতে পরিবর্তন করেছি এবং এটি পুনর্বিবেচনা করা হয়েছিল।


1

আপনি এমএস জালিয়াতি সমাবেশগুলির জন্যও এই সতর্কতাটি পেতে পারেন যা f.csproj কমান্ড অন কমান্ড হওয়ার কারণে সমাধান করা তত সহজ নয়। ভাগ্যক্রমে নকল xML আপনাকে এটিতে এটি যুক্ত করতে দেয়


0

.NET EXE / DLL AnyCPU তৈরির কোনও উপায় থাকতে হবে এবং এটি যে কোনও পরিচালনা ছাড়াই ডিএলএল উভয়ই x86 এবং x64 এর সাথে সংকলিত উপর নির্ভর করে, উভয়ই বিভিন্ন ফাইলের নাম সহ বান্ডিল করা যায় এবং তারপরে। নেট মডিউলটি তার রানটাইমের উপর ভিত্তি করে সঠিকটিকে সঠিকভাবে লোড করতে পারে প্রসেসরের আর্কিটেকচার। এটি যে কোনও এসিপিইউকে শক্তিশালী করে তুলবে। যদি সি ++ ডিএলএল কেবল x86 বা x64 সমর্থন করে তবে যে কোনও সিসিপিইউ অবশ্যই অর্থহীন। কনফিগারেশন ম্যানেজার এমনকি যে কোনও কনসিফিউশন বা অন্য কনসেপ্ট যেমন যে কোনও কনফিগারেশন যেমন সম্ভব হতে পারে এমন একাধিক বান্ডিলিংয়ের জন্য আলাদা কনফিগারেশন / প্ল্যাটফর্ম দিয়ে দু'বার একই প্রকল্প তৈরির উপায় সরবরাহ করে না এমন হিসাবে আমি এখনও বাস্তবায়ন দেখতে পেলাম বান্ডিল উভয় ধারণা।


2
স্ট্যাকওভারফ্লোতে স্বাগতম! আপনি কি এই উত্তরটি কিছুটা ফোকাস / পুনরায় ফর্ম্যাট করার চেষ্টা করতে পারেন?
করলি ব্রিগম্যান

এটি দেখে মনে হচ্ছে এটি কোনও ভাল প্রশ্ন, বা একটি ব্লগ পোস্ট বা কানেক্টে কোনও বৈশিষ্ট্য অনুরোধ করবে ... এটি আসলে এর উত্তর দেয় না।
বেন ভয়েগট 21'15

0

আমার বিল্ডে আমার খুব অনুরূপ সতর্কতা ছিল। আমার প্রকল্পগুলি .NET 4.5 লক্ষ্যবস্তুতে সেট করা হয়েছিল, বিল্ড সার্ভারে উইন্ডোজ 8.1 এসডিকে (.NET 4.5.1 এর জন্য) ইনস্টল করা হয়েছিল। .NET 4.5.1 লক্ষ্য হিসাবে আমার প্রকল্পগুলি আপডেট করার পরে (আমার পক্ষে কোনও সমস্যা ছিল না, সম্পূর্ণ নতুন অ্যাপ্লিকেশনের জন্য ছিল), আমি আর সতর্কতা পেলাম না ...


0

"কনফিগারেশন ম্যানেজার" পরিবর্তন (মিশ্র প্লাটফর্ম) প্রকাশের জন্য আমি এই সতর্কবার্তাটি সমাধান করেছি।


0

এসকিউএল সার্ভার 2012 এসপি 1 এসএসআইএস পাইপলাইন স্ক্রিপ্ট টাস্কটি সংকলন করার সময় আমি ভিজুয়াল স্টুডিও 2012-এ এই সতর্কতা পেয়েছি - যতক্ষণ না আমি এসকিউএল সার্ভার 2012 এসপি 2 ইনস্টল করি।


0

আমার এসকিউএলাইট খোলার সংযোগের ক্ষেত্রে একই সমস্যা ছিল এবং নুগেট ব্যবহার এবং প্রকল্পে ব্যবহৃত উপাদান (এসকিউএলাইট) ইনস্টল করা এটি ঠিক করে দিয়েছে! এইভাবে আপনার উপাদানটি ইনস্টল করার চেষ্টা করুন এবং ফলাফলটি দেখুন


0

Https://docs.microsoft.com/en-us/visualstudio/msbuild/customize-your-build#directorybuildprops- উদাহরণ ব্যবহার করুন :

  • আপনার সলিউশন ফোল্ডারে একটি ডিরেক্টরি.Build.prop ফাইল যুক্ত করুন
  • এটি এতে আটকান:
<Project>
 <PropertyGroup>
   <ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>None</ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>
 </PropertyGroup>
</Project>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.