আমি সি # 4.0 ব্যবহার করে আমার এক্সেল অ্যাডিন সংকলন করার চেষ্টা করছি এবং ভিজুয়াল স্টুডিওতে আমার প্রকল্পটি তৈরি করার সময় এই সমস্যাটি পেতে শুরু করেছি। আপনাকে বলা গুরুত্বপূর্ণ যে আমার আগে এই সমস্যাটি ছিল না। কি ঘটতে পারে?
আমি সি # 4.0 ব্যবহার করে আমার এক্সেল অ্যাডিন সংকলন করার চেষ্টা করছি এবং ভিজুয়াল স্টুডিওতে আমার প্রকল্পটি তৈরি করার সময় এই সমস্যাটি পেতে শুরু করেছি। আপনাকে বলা গুরুত্বপূর্ণ যে আমার আগে এই সমস্যাটি ছিল না। কি ঘটতে পারে?
উত্তর:
আমার অনুমান যে আপনি দৃ strongly় নামযুক্ত সমাবেশগুলির সাথে কাজ করছেন না। যখন দুটি প্রকল্প একই অ্যাসেমব্লির সামান্য ভিন্ন সংস্করণ এবং আরও নির্ভরশীল প্রকল্পগুলির এই প্রকল্পগুলির উল্লেখ করে তখন আমার এই ত্রুটি হয়েছিল। আমার ক্ষেত্রে রেজোলিউশনটি ছিল .csproj ফাইলগুলিতে সমাবেশ নাম থেকে মূল এবং সংস্করণ তথ্য সরিয়ে ফেলা (এটি কোনওভাবেই আসে না) এবং তারপরে একটি পরিষ্কার বিল্ড করা।
বিভিন্ন সমাবেশ সংস্করণগুলির মধ্যে পরিবর্তনগুলি তাদের উল্লেখ করে সমাধানের অংশগুলির সাথে সামঞ্জস্যপূর্ণ। যদি আপনার ক্ষেত্রে এটি না হয় তবে সমস্যাটি সমাধান করার জন্য আপনাকে আরও কিছু কাজ করতে হতে পারে।
নিউগেটের সাহায্যে এই পরিস্থিতিতে পড়া সহজ হয় যদি:
এটি আপনার প্যাকেজের অ্যাসেমব্লির বিভিন্ন সংস্করণ উল্লেখ করে দুটি সমাধানে ফলাফল দেয়। যদি তাদের মধ্যে একটির অপরটিকে রেফারেন্স করে এবং ক্লিকঅনস অ্যাপ হয় তবে আপনি এই সমস্যাটি দেখতে পাবেন।
এটির সমাধানের জন্য, update-package [package name]
সবকিছুকে স্তরের প্লেয়িং ফিল্ডে আনার জন্য নুগেট প্যাকেজ ম্যানেজার কনসোলে কমান্ডটি জারি করুন , যার পর্যায়ে সমস্যাটি চলে যায়।
না করার বাধ্যতামূলক কারণ না থাকলে আপনার প্রকল্পের স্তরের চেয়ে সমাধান স্তরে নিউগেট প্যাকেজগুলি পরিচালনা করা উচিত। সমাধান স্তরের প্যাকেজ পরিচালনা নির্ভরতার একাধিক সংস্করণের সম্ভাবনা এড়িয়ে চলে। ম্যানেজমেন্ট ইউআই ব্যবহার করার সময়, যদি একীভূত ট্যাবটি দেখায় যে 1 বা আরও বেশি প্যাকেজের একাধিক সংস্করণ রয়েছে, সেগুলিকে একটিতে সংহতকরণ বিবেচনা করুন।
আমার যখন এই সমস্যা হয়েছিল তখন আমি 'সক্ষম ক্লিক ক্লিক সুরক্ষা সেটিংস' বন্ধ করে এটি ঠিক করেছি।
মেনু: প্রকল্প | 'প্রকল্পের নাম' সম্পত্তি ... | সুরক্ষা ট্যাব | 'ক্লিকওন্স সুরক্ষা সেটিংস সক্ষম করুন' চেক বক্স।
এই উত্তর দেখুন ।
প্রকাশের পৃষ্ঠায় যান এবং "অ্যাপ্লিকেশন ফাইলগুলি" ক্লিক করুন। সেখান থেকে আপনার ডিএলএলগুলির একটি তালিকা দেখতে পাওয়া উচিত। নিশ্চিত করুন যে আপনাকে যে সমস্যা দিচ্ছে তাদের "স্ট্রোকস" না হয়ে তার প্রকাশের স্থিতিকে "অন্তর্ভুক্ত" হিসাবে চিহ্নিত করা হয়েছে।
আমার এই সমস্যা হয়েছে এটি ঘটেছিল কারণ আমার অনেকগুলি প্রকল্প একই সমাবেশে দেখানো হয়েছে তবে বিভিন্ন সংস্করণ থেকে। আমার সমাধানে সমস্ত প্রকল্পের জন্য একই সংস্করণ নির্বাচন করে আমি এটি সমাধান করি।
আপনি যদি নিজের সমাবেশ সংস্করণটি পরিবর্তন করে থাকেন বা ত্রুটিতে বর্ণিত পরিচালিত লাইব্রেরির একটি ভিন্ন সংস্করণ অনুলিপি করেন তবে আপনি পূর্বে ভুল সংস্করণটি উল্লেখ করে ফাইলগুলিও সংকলন করতে পারেন। একটি 'পুনর্নির্মাণ সমস্ত' (বা আপনাকে পূর্ববর্তী মন্তব্যে উল্লিখিত হিসাবে 'বিন এবং' আপত্তি 'ফোল্ডারগুলি মুছে ফেলা উচিত) এই কেসটি ঠিক করা উচিত।
আপনার একটি কী দিয়ে অ্যাসেম্বলি সাইন করতে হবে। ট্যাব স্বাক্ষরের অধীনে প্রকল্পের বৈশিষ্ট্যগুলিতে যান:
এটি যে কারও পক্ষে সহায়তা করতে পারে এই সমস্যাটির জন্য আমার সমাধান যোগ করা।
এই ত্রুটিটি ছুঁড়ে দেওয়ার জন্য আমার কাছে ক্লিকঅনস সমাধান ছিল। অ্যাপ্লিকেশনটি একটি সাধারণ "Libs" ফোল্ডারটিকে রেফারেন্স করেছে এবং এতে একটিতে প্রকল্পের রেফারেন্স রয়েছে Foo.dll
। যদিও সমাধানের কোনও প্রকল্পই Foo.dll
"Libs" ফোল্ডারের মধ্যে স্ট্যাটিক অনুলিপিটি উল্লেখ করে নি, সেই ফোল্ডারের কিছু রেফারেন্সই করেছিল (যেমন: আমার সমাধানটিতে Libs\Bar.dll
রেফারেন্স দেওয়া হয়েছে যার সাথে রেফারেন্স দেওয়া হয়েছিল Foo.dll
।) যেহেতু সিও অ্যাপ্লিকেশনটি সমস্ত নির্ভরতা টেনে নিয়েছে Libs
পাশাপাশি তাদের নির্ভরতা, উভয় অনুলিপি প্রকল্পে যাচ্ছিল। এটি উপরের ত্রুটিটি তৈরি করছিল।
আমি আমার Libs\Foo.dll
স্থির সংস্করণটি একটি সাবফোল্ডারে স্থানান্তরিত করে সমস্যার সমাধান করেছি Libs\Fix\Foo.dll
। এই পরিবর্তনটি ক্লিকঅনস অ্যাপ্লিকেশনটিকে কেবলমাত্র ডিএলএল-এর প্রকল্প সংস্করণ ব্যবহার করে এবং ত্রুটিটি অদৃশ্য হয়ে গেছে।
ডিএলএল মুছে ফেলা (যেখানে ত্রুটি দেখা দিয়েছে) এবং পুনরায় বিল্ডিং আমার সমস্যার সমাধান করে fixed ধন্যবাদ
আপনি যদি এই প্রশ্নের অন্যান্য সমস্ত উত্তর চেষ্টা করে থাকেন এবং আপনি:
... আপনার প্রকল্পগুলির রেফারেন্সগুলিতে আপনার কাছে নুগেট প্যাকেজ ডিএলএল এর পৃথক সংস্করণ থাকতে পারে, কারণ ইন্টেলিসেন্স / রিসার্পার দ্বারা তৈরি রেফারেন্সটি একটি "সাধারণ" রেফারেন্স হবে, এবং কোনও নিউগেট রেফারেন্স প্রত্যাশার মতো নয়, সুতরাং নুগেট আপডেট প্রক্রিয়াটি জিতেছে ' এটি খুঁজে বা আপডেট!
এটি ঠিক করার জন্য, প্রকল্প এ-তে রেফারেন্সটি সরান, তারপরে এটি ইনস্টল করতে নিউগেট ব্যবহার করুন এবং নিশ্চিত করুন যে সমস্ত প্রকল্পের নুগেট প্যাকেজগুলি একই সংস্করণ। ( এই উত্তরে ব্যাখ্যা হিসাবে )
ReSharper / Intellisense আপনার প্রকল্পে একটি রেফারেন্স যুক্ত করার পরামর্শ দিলে এই সমস্যাটি আসতে পারে। এটি উপরের উদাহরণের চেয়ে অনেক বেশি গভীরভাবে সংশ্লেষিত হতে পারে, একাধিক আন্তঃনির্মিত প্রকল্প এবং নির্ভরতা এটি ট্র্যাক করা শক্ত করে তোলে। যদি রেসার্পার / ইন্টেলিসেন্সের পরামর্শ দেওয়া রেফারেন্সটি আসলে একটি নুগেট প্যাকেজ থেকে আসে তবে এটি ইনস্টল করতে নিউগেট ব্যবহার করুন।
আমার সমাধানে অনেকগুলি প্রকল্পের মধ্য দিয়ে যেতে হয়েছিল এবং স্বতন্ত্রভাবে আপডেট করার জন্য আমি এটি দ্বারা স্থির করেছি:
প্যাকেজ.সনফিগ থেকে প্যাকেজ-রেফারেন্সে একটি এক্সেল অ্যাডিন স্থানান্তরিত করার পরে আমি এই সমস্যার মুখোমুখি হয়েছি। এই ইস্যুটির সাথে সম্পর্কিত বলে মনে হচ্ছে ।
আপনি যদি ক্লিকঅনস ব্যবহার না করেন তবে নিম্নলিখিতটি একটি অশোধিত কাজ হিসাবে কাজ করে (এটি .manifest
ফাইল থেকে সমস্ত নির্ভরতার তথ্য বাদ দেবে ):
বিভাগটি এমন দেখাচ্ছে:
<!-- Include additional build rules for an Office application add-in. -->
<Import Project="$(VSToolsPath)\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets" Condition="'$(VSToolsPath)' != ''" />
রেফারেন্সযুক্ত .targets
ফাইলটির একটি নতুন নামকৃত অনুলিপি সম্পাদনা করুন (আমার ক্ষেত্রে ফাইলটি সমাধান হয়েছে C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\VisualStudio\v15.0\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets
এবং আমি Microsoft.VisualStudio.Tools.Office_FIX.targets
একই ফোল্ডারে একটি অনুলিপি তৈরি করেছি - এটি অন্য কোনও ফোল্ডার থেকে কাজ করে কিনা তা যাচাই করে নি)।
এই GenerateApplicationManifest
উপাদান এবং তার অ্যাট্রিবিউট পরিবর্তন Dependencies="@(DependenciesForGam)"
করা Dependencies=""
।
.targets
পরিবর্তিত আপনার সম্পাদিত ফাইলটি রেফারেন্স করতে 2-এ পাওয়া বিভাগটি পরিবর্তন করুন ।
যখনই .targets
ভিএস সহ শিপ করা ফাইলটির সংস্করণ আপডেট করা হবে তখনই এটি পুনরাবৃত্তি করতে হবে (বা আপনি আপডেটগুলি পাবেন না) তবে আমি আশা করছি এটি শীঘ্রই ঠিক হয়ে যাবে ...
আপনার সমাবেশটি কি সঠিকভাবে স্বাক্ষরিত?
এটি পরীক্ষা করতে আপনার প্রকল্পে Alt + Enter টিপুন (বা ডান ক্লিক করুন, তারপরে বৈশিষ্ট্যগুলি)। "সাইনিং" এ যান। যাচাই করুন যে চেক বক্স "সমাবেশ সাইন ইন" চেক করা হয় এবং শক্তিশালী নাম কী ফাইল নির্বাচন করা হয় এবং "বিলম্ব চিহ্ন শুধুমাত্র" হয় অবারিত ।
এখন সমস্যাটির জন্য আলাদা পদ্ধতি রয়েছে:
প্রকল্পে ডান ক্লিক করুন এবং 'আনলোড প্রকল্প' বিকল্পটি নির্বাচন করুন। আপনি প্রকল্পটি অনুপলব্ধ হয়ে উঠবে তা লক্ষ্য করবেন।
অনুপলব্ধ প্রকল্পে ডান ক্লিক করুন এবং 'সম্পাদনা' বিকল্পটি নির্বাচন করুন।
সমস্ত উত্স ট্যাগ থাকা '<আইটেমগ্রুপ>' ট্যাগে স্ক্রোল করুন।
এখন ত্রুটি তালিকায় প্রদর্শিত হয়েছে এমন রেফারেন্সে যান, আপনি এটি লক্ষ্য করবেন যে এটি একটি একক ট্যাগ (যেমন < Reference Include="assemble_name_here, Version=0.0.0.0, Culture=neutral" / >
) ব্যবহার করে।
নিম্নলিখিত হিসাবে দেখতে এটি পরিবর্তন করুন:
।
<Reference Include="assemble_name_here, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL" >
< Private > True < / Private >
< HintPath > path_here\assemble_name_here.dll < / HintPath >
< / Reference >
যদি আপনার প্রধান প্রকল্পটি কিছু লাইব্রেরি প্রকল্প ব্যবহার করে এবং সেগুলির সাথে রেফারেন্স থাকে তবে আপনি যদি আপনার লাইব্রেরি প্রকল্পের কোনও কিছু পরিবর্তন করেন (উদাহরণস্বরূপ: একটি শ্রেণীর নাম পরিবর্তন করুন) আপনার লাইব্রেরি প্রজেক্টের পরিবর্তে কোনও এসেম্বলি ডিএল ফাইলের প্রসঙ্গে যদি আপনার প্রকল্পটি এই সমস্যার কারণ হতে পারে।
আপনি অবজেক্ট ব্রাউজার উইন্ডোতে (মেনু দেখুন-> অবজেক্ট ব্রাউজার) আপনার মূল প্রকল্পের সমস্ত রেফারেন্স চেক করতে পারেন। একটি dll ফাইলের একটি রেফারেন্স সর্বদা একটি সংস্করণ নম্বর আছে। উদাঃ টেস্টলিব [১.০.০.০]
সমাধান: লাইব্রেরী প্রকল্পে আপনার মূল প্রকল্পের বর্তমান তথ্যসূত্র মুছুন এবং আবার সেই লাইব্রেরি প্রকল্পে রেফারেন্স যুক্ত করুন।
এখানে বেশিরভাগ সমাধানের চেষ্টা করার পরে, আমি অবশেষে একবারই ক্লিক একবারের প্রকল্প থেকে এই প্রকল্পের জন্য একটি রেফারেন্স যুক্ত করেছি, এটি এটি অন্তর্ভুক্ত থেকে অন্তর্ভুক্ত (অটো) এ পরিবর্তন করে এবং শেষ পর্যন্ত এটি কাজ করে।
আমাকে কী সাহায্য করেছিল তা আমি প্যাকেজ ম্যানেজার সলিউশনে গিয়ে ইনস্টলড প্যাকেজটির দিকে চেয়েছিলাম যা সমস্যার কারণ হয়ে দাঁড়িয়েছে। আমি দেখেছি যে বেশ কয়েকটি প্রকল্প একই প্যাকেজটি উল্লেখ করেছে তবে বিভিন্ন সংস্করণ। আমি আমার প্রয়োজনের ভিত্তিতে এগুলি প্রান্তিক করেছি এবং এটি কার্যকর হয়েছে।
আমি একটি সমাধান ডাব্লু / 6 প্রকল্পে এটি ছিল। আমার প্রকল্পগুলির মধ্যে একটি নাম ফাইলটিকে রেফারেন্স হিসাবে উল্লেখ করছে assembly অন্যরা সবাই প্রকল্পের রেফারেন্সের দিকে ইশারা করছিল।
আমি সাধারণত এই ক্ষেত্রে একটি পৃথক ত্রুটি পেতে।
আমার সমাধানটি ছিল নামকরণ করা সমাবেশটি যেখানেই উল্লেখ করা হয়েছে মুছে ফেলা এবং এটি আবার যুক্ত করা। আমি একবার প্রকল্পের মাধ্যমে কাজ করার পরে সমস্যাটি অদৃশ্য হয়ে গেল। এটি করার আগে, আমি সমাধানটি পরিষ্কার করার পাশাপাশি কোনও প্রকল্পে স্বাক্ষরিত না হয়েছে তা নিশ্চিত করার চেষ্টা করেছি।
আশা করি এটি কাউকে সাহায্য করবে ...
যদি এটি নির্ভরতা নির্ভরতাগুলির অমিল হয় তবে দ্রবণ স্তরের নিউগেট প্যাকেজ ম্যানেজারের কাছে যান এবং আপডেট এবং একত্রীকরণ ট্যাবগুলি পরীক্ষা করে দেখুন, এটি সমস্ত এক করে।
আমি সম্প্রতি এই সমস্যাটি আঘাত করেছি। আমার ক্ষেত্রে, আমার কাছে বিভিন্ন সমাবেশে নিউগেট প্যাকেজ রয়েছে। আমার যা ছিল তা ছিল আমার নিজের অ্যাসেমব্লির সাথে সম্পর্কিত একই নিউগেট প্যাকেজগুলির বিভিন্ন সংস্করণ।
আমার সমাধানটি হ'ল পৃথক প্রকল্পগুলির বিপরীতে সলিউশনটির উপরে নুগেট প্যাকেজ ম্যানেজারটি ব্যবহার করা হয়েছিল। এটি একটি "একীকরণ" বিকল্প সক্ষম করে, যেখানে আপনি আপনার নুগেট প্যাকেজগুলিকে আপনার যতগুলি প্রকল্পের আওতায় আপগ্রেড করতে পারেন - তাই তারা সমস্ত বিধানসভার একই সংস্করণটি উল্লেখ করে। যখন আমি একীকরণ করি তখন বিল্ড ব্যর্থতা অদৃশ্য হয়ে যায়।
আপডেট-প্যাকেজ-পুনরায় ইনস্টল করুন -আজ্ঞাত নির্ভরশীলতাগুলির সাথে চেষ্টা করুন
bin
এবংobj
ফোল্ডার উভয়ই সরিয়ে ফেলুন এবং আবার প্রকল্পটি তৈরি করুন। কখনও কখনও এটি কাজ করে।