নির্ভরশীল ডিএলএল ভিজ্যুয়াল স্টুডিওতে বিল্ড আউটপুট ফোল্ডারে অনুলিপি পাচ্ছে না


185

আমার কাছে একটি ভিজ্যুয়াল স্টুডিও সমাধান রয়েছে। সমাধানে আমার অনেক প্রকল্প রয়েছে। একটি মূল প্রকল্প রয়েছে যা সূচনা হিসাবে কাজ করে এবং অন্যান্য প্রকল্পগুলি ব্যবহার করে। "প্রজেক্টএক্স" বলে একটি প্রকল্প রয়েছে। এর উল্লেখটি মূল প্রকল্পে যুক্ত করা হয়েছে। প্রজেক্টএক্স আরেকটি .NET dll উল্লেখ করে (abc.dll বলে) যা সমাধানের অংশ নয়।

এখন এই abc.dll মূল প্রকল্পের বিন / ডিবাগ ফোল্ডারে অনুলিপি করা উচিত, তবে এটি অনুলিপি করা হচ্ছে না। কেন এটি অনুলিপি করা হচ্ছে না, কোনও পরিচিত কারণ?


যদি আপনি এটি বের করতে না পারেন তবে এটি আপনার প্রাক বিল্ডে অনুলিপি করুন।
দিলশোদ

মূল প্রকল্পে আপনি কীভাবে আপনার 'প্রজেক্টএক্স' ব্যবহার করেন - প্রকল্পের ধরণ কী, লক্ষ্য ইত্যাদি
এনএসগাগা-বেশিরভাগ-নিষ্ক্রিয়

আমার একই সমস্যা ছিল এবং এই উত্তরটি আমার সমস্যার সমাধান করেছে: stackoverflow.com/a/8213977/174469
গর্ডন টাকার


আছে RestoreProjectStyle সমাধান প্রাপ্তিসাধ্য<RestoreProjectStyle>PackageReference</RestoreProjectStyle>সমাধানটি প্রতিটি। নেট ফ্রেমওয়ার্ক প্রকল্পের জন্য সেট করা হয়।
ওলেকসায়

উত্তর:


105

আমি দেখতে পেলাম যে যদি প্রজেক্টএক্স abc.dll রেফারেন্স করে তবে abc.dll এ সংজ্ঞায়িত ধরণের কোনটি সরাসরি ব্যবহার না করে তবে abc.dll মূল আউটপুট ফোল্ডারে অনুলিপি করা হবে না। (এটিকে অতিরিক্ত বিভ্রান্ত করার জন্য এটি প্রজেক্টএক্স আউটপুট ফোল্ডারে অনুলিপি করা হবে))

সুতরাং, আপনি যদি প্রজেক্টএক্সের যে কোনও জায়গায় abc.dll থেকে স্পষ্টভাবে কোনও প্রকারের ব্যবহার করছেন না, তবে প্রজেক্টএক্সের যে কোনও একটি ফাইলের কোথাও একটি ডামি ঘোষণা রাখুন।

AbcDll.AnyClass dummy006; // this will be enough to cause the DLL to be copied

আপনার প্রতিটি শ্রেণীর জন্য এটি করার দরকার নেই - একবারে ডিএলএল অনুলিপি তৈরি করতে যথেষ্ট হবে এবং সবকিছু প্রত্যাশার মতো কাজ করে।

সংযোজন: দ্রষ্টব্য যে এটি ডিবাগ মোডের জন্য কাজ করতে পারে তবে প্রকাশের জন্য নয়। বিস্তারিত জানার জন্য @ এনভर्थের উত্তর দেখুন।


7
এটি হ্যাকের মতো মনে হচ্ছে। মূল প্রকল্পটিতে রেফারেন্স যুক্ত করা যথেষ্ট বলে মনে হচ্ছে।
মাইকে কে

3
এটি হ্যাক, তবে আজকের কোডপ্রজেক্টের সংবাদ যেমন আমাদের শিখিয়েছে, এমনকি সংকলকগুলিও ভুল হতে পারে!
ওভারলর্ড জুর্গ

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

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

5
@ মাইকেকে এটি মূল প্রকল্পে যুক্ত করা (যা আসলে সরাসরি এর উপর নির্ভর করে না) এটি আরও বড় হ্যাক, তারপরে আপনাকে এটিকে দুটি স্থানে পরিচালনা করতে হবে (আপগ্রেড বা অপসারণ হিসাবে "পরিচালনা")। সঙ্গে এই হ্যাক, অন্তত আপনি মনে করিয়ে এই হ্যাক মুছে ফেলার জন্য যখন আপনি নির্ভরতা অপসারণ একটা চমৎকার সময় সঙ্কলন ভুল পান, এবং আপনি এখনও শুধুমাত্র একটি স্থানে আপডেট করতে হবে।
jpmc26

70

ওভারলর্ড জুর্গের উত্তরের কেবল একটি বিভাজন।

আমি এইভাবে ডামি রেফারেন্স যুক্ত করেছি এবং এটি ডিবাগ মোডে কাজ করেছে:

public class DummyClass
{
    private static void Dummy()
    {
        var dummy = typeof(AbcDll.AnyClass);
    }
}

কিন্তু রিলিজ মোডে, নির্ভরশীল dll এখনও অনুলিপি করেনি।
এটি তবে কাজ করেছে:

public class DummyClass
{
    private static void Dummy()
    {
        Action<Type> noop = _ => {};
        var dummy = typeof(AbcDll.AnyClass);
        noop(dummy);
    }
}

এই তথ্যটি আমাকে চিত্রিত করার জন্য কয়েক ঘন্টা সময় দিয়েছে, তাই আমি ভেবেছিলাম আমি এটি ভাগ করে নিই।


6
রিলিজ মোডে, অপ্টিমাইজার ধরে নিন যে "ডামি" ব্যবহার করা হয়নি তাই এই লাইনটি অপ্রয়োজনীয় এবং এটি সরানো উচিত। আপনি যখন কোডটিতে "ডামি" ব্যবহার করেন, তখন অপ্টিমাইজার এটিকে অপ্রয়োজনীয় বলে ধরে নেন না।
ইউসেল

1
এটি আমার পক্ষে কাজ করে না bএবসিডিএল.এইনি ক্লাস এখনও অন্য প্রকল্পে অনুলিপি করা হয়নি
ম্যাথু লক

3
নিশ্চিত করুন যে AbcDll.AnyClassকোনও সরকারী শ্রেণিতে জনসাধারণের ক্ষেত্র বা সম্পত্তি হিসাবে ব্যবহৃত হয়েছে, তবে এটি কার্যকর হবে। আপনি যদি কোনও পদ্ধতিতে এটির মতো ব্যবহার করেন তবে সংকলক এটি দেখতে পাবে না । এটি এই অ্যাসেমব্লিকে লোড করতে বিলম্ব করবে, আপনি যা করতে চান তা নয়।
জন লিডেগ্রেন

52

হ্যাঁ, আপনি সেট Copy Localকরতে হবে true। তবে আমি নিশ্চিত যে আপনারও মূল প্রকল্প থেকে এই সমাবেশটি উল্লেখ করতে হবে এবং এটিও সেট Copy Localকরতে trueহবে - এটি কেবল নির্ভরশীল অ্যাসেমব্লী থেকে অনুলিপি করা হয় না।

Copy Localঅধীনে সমাবেশে ক্লিক করে Referencesএবং F4 টিপে আপনি সম্পত্তিটিতে যেতে পারেন ।


2
@ ব্রিজ, আপনি যে মূল প্রকল্পটি চান তাতে অ্যাসেম্বলিটি উল্লেখ করা হয়? আমি যেমন বলেছি, আমি নিশ্চিত যে আপনাকে সেই প্রকল্প থেকেও রেফারেন্স করতে হবে - নির্ভরশীল অ্যাসেমব্লিশগুলি এর মতো অনুলিপি করা হয় না। যদি এমনটি হয় তবে নুগেট ব্যবহার করার সময় আপনার সমস্ত প্রাসঙ্গিক প্রকল্পগুলিতে অ্যাসেম্বলিগুলি যুক্ত করার দরকার পড়েনি।
মাইক পেরেনৌড

1
এখানে উপসংহার কি ছিল? আমার কাছে মনে হচ্ছে আপনি ঠিক বলেছেন - কপিরলোকল সত্য হিসাবে সেট করা থাকলেও নির্ভরযোগ্য উল্লেখগুলি অনুলিপি করা হয় না - এর পিছনে যুক্তি কী?
এমসিএমিল্যাব

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

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

2
আমার বর্তমান অভিজ্ঞতাটি হ'ল এটি 'অনুলিপি করা' নির্ভরতা ব্যতীত কাজ করবে : প্রজেক্ট এ নেট ডেস্ক: বাহ্যিক সি ++ ডিএলগুলি 'সর্বদা অনুলিপি' থাকা ফাইল হিসাবে উল্লেখ করে। প্রকল্প বি.এন.এফ. প্রকল্পের রেফারেন্স প্রজেক্ট এ। নির্মাণের সময়, বি / ডিবাগে সি ++ ডলস অন্তর্ভুক্ত রয়েছে। যাইহোক, আমি যখন অ্যাপ্লিকেশন এক্স তৈরি করি, যা প্রজেক্ট বি এর উল্লেখ করে, সি ++ ডলগুলি কখনও কখনও অনুলিপি করা হয় (মনে হয় আমি যদি পুনর্নির্মাণ করি তবেই এটি হবে)।
বেনজল

33

আপনি এটি কোনও অ্যাসেম্বলি অ্যাট্রিবিউট তৈরি করার সময় অদ্ভুত লাগে

[AttributeUsage(AttributeTargets.Assembly)]
public class ForceAssemblyReference: Attribute
{        
    public ForceAssemblyReference(Type forcedType)
    {
        //not sure if these two lines are required since 
        //the type is passed to constructor as parameter, 
        //thus effectively being used
        Action<Type> noop = _ => { };
        noop(forcedType);
    }
}

ব্যবহার হবে:

[assembly: ForceAssemblyReference(typeof(AbcDll.AnyClass))]

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

25

এই একই ইস্যু মধ্যে দৌড়ে। পটভূমি তথ্য: বিল্ডিংয়ের আগে, আমি সমাধানে একটি নতুন প্রজেক্ট এক্স যুক্ত করেছি। প্রকল্প ওয়াই প্রজেক্ট এক্স এবং প্রজেক্ট এ, বি, সি নির্ভর করে প্রকল্প ওয়াইয়ের উপর Y

বিল্ড ত্রুটিগুলি হ'ল প্রকল্প A, B, C, Y এবং X dlls খুঁজে পাওয়া যায় নি।

মূল কারণটি হ'ল নতুন নির্মিত প্রজেক্ট এক্স টার্নেট .NET 4.5 কে লক্ষ্য করেছিল এবং বাকী সমাধান প্রকল্পগুলি নেট .৪.৪.১। প্রকল্প এক্স বিল্ডিং করেনি যার ফলে বাকি প্রকল্পগুলিও নির্মাণ করে না।

নিশ্চিত হয়ে নিন যে কোনও নতুন যুক্ত হওয়া প্রকল্পগুলি বাকী সমাধান হিসাবে একই .NET সংস্করণটিকে লক্ষ্য করে।


1
রেফারেন্সযুক্ত প্রকল্পগুলি .NET এর পুরানো সংস্করণ হতে পারে। .NET 4 এর জন্য নির্মিত একটি প্রকল্প দ্বারা নেট 4 4 এর জন্য নির্মিত একটি প্রকল্পের রেফারেন্স দিতে পারছি।
redcurry

18

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

আমি "বিদ্যমান ফাইল যুক্ত করে" ভিজ্যুয়াল স্টুডিওতে এটি সম্পন্ন করি। আপনার এটি অ্যাড_ডাটা ফোল্ডার ব্যতীত অন্য কোথাও যুক্ত করতে সক্ষম হওয়া উচিত। ব্যক্তিগতভাবে আমি এটিকে মূলটিতে যুক্ত করি।

তারপরে সেই ফাইলটির বৈশিষ্ট্যগুলি পরিবর্তন করুন ...

বিল্ড অ্যাকশন = কোনওটি নয় (সামগ্রীতে এমন কিছু সামগ্রী স্থাপনের ফলে আসলে "রুট" সংস্করণটি মূলকে অনুলিপি করা হয়, সাথে বিনের একটি অনুলিপি)।

আউটপুট ফোল্ডারে অনুলিপি = নবীন হলে অনুলিপি করুন (মূলত এটি অনুপস্থিত থাকলেই এটি বিন ফোল্ডারে রাখে, তবে এটি পরে করবেন না)

যখন আমি প্রকাশ করি .. আমার যুক্ত করা ডিএলএল কেবল বিআইএন ফোল্ডারে এবং অন্য কোথাও প্রকাশের স্থানে নেই (যা আমি চাই তা)।


10

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

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

জিএসি-তে কী আছে তা পরীক্ষা করতে (একটি ভিজ্যুয়াল স্টুডিও বিকাশকারী কমান্ড প্রম্পট থেকে):

gacutil -l

বা কোনও ফাইলকে পড়া সহজ করার জন্য আউটপুট:

gacutil -l > output.txt
notepad.exe output.txt

একটি সমাবেশ অপসারণ:

gacutil -u MyProjectAssemblyName

আমার এও লক্ষ্য করা উচিত, একবার আমি জিএসি থেকে ফাইলগুলি সরিয়ে ফেললাম সেগুলি একটি বিল্ডের পরে \ বিন ডিরেক্টরিতে সঠিকভাবে আউটপুট ছিল (এমনকি মূল প্রকল্পে যে সমাবেশগুলি সরাসরি উল্লেখ করা হয়নি) for এটি ভিজ্যুয়াল স্টুডিওতে ছিল 2013 আপডেট 5।


ধন্যবাদ, আপনি ঠিক বলেছেন, এমএসবিল্ড যদি এটি জিএসি তে খুঁজে পায় তবে dll কে আউটপুট ফোল্ডারে কপি করবেন না।
জন-ফিলিপ

3

আমার ক্ষেত্রে এটি টিউফএস / ভিএস-এর একটি ডিফল্ট আচরণের কারণে বোকামিযুক্ত জিনিস ছিল যার সাথে আমি একমত নই।

যেহেতু মূল প্রকল্পটির উল্লেখ হিসাবে dll যোগ করা কার্যকর হয়নি, তাই আমি কপি লোকাল = সর্বদা সাথে এটি একটি "বিদ্যমান আইটেম" হিসাবে যুক্ত করার সিদ্ধান্ত নিয়েছি। তারপরেও ফাইলটি ছিল না।

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

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

আমি আশা করি এটি কারও কিছুটা সময় সাশ্রয় করেছে, যেহেতু আমি এতে আমার জীবনের 2 দিন হারিয়েছি।


1
আমি আপনাকে যথেষ্ট ধন্যবাদ দিতে পারি না ... আপনি আমাকে এত সময় বাঁচিয়েছেন। এটি আমার জন্য সমাধান ছিল। এটি মূল সমস্যাটিকেও উদ্ভাসিত করেছে, আমি যে ডিএলএলটিকে রেফারেন্স হিসাবে একটি gitignoreপ্যাটার্নের সাথে মিলেছি, তাই কোনও রেফারেন্স হিসাবে যুক্ত করার সময় এটি প্রকল্পে যুক্ত হয় না। সোর্স কন্ট্রোলটিতে আপনাকে ম্যানুয়ালি ফাইলটি যুক্ত করতে হবে !!!
ম্যাটকুইশ

2

এটি এনভर्थের উদাহরণে একটি সামান্য ঝলক

internal class DummyClass
{
    private static void Dummy()
    {
        Noop(typeof(AbcDll.AnyClass));
    }
    private static void Noop(Type _) { }
}

2

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

আপনি এগুলি প্রকল্পের বৈশিষ্ট্যগুলিতে খুঁজে পেতে পারেন -> ইভেন্টগুলি তৈরি করুন।


এটি আমার পক্ষে কাজ করেছিল এবং আমি মনে করি এটিই এর চেয়ে উত্তম উত্তর। ডামি রেফারেন্স সমাধানটি কাজ করে তবে এটি একটি হ্যাক, যেখানে একটি পোস্ট-বিল্ড নিয়ম একই ফলাফলটি অর্জনের একটি পরিষ্কার উপায়।
কেভিন ফিচার

2

সমস্যা:

নুগেট প্যাকেজ ডিএলএল (নিউটোনসফট.জসন.ডিল) এর অনুরূপ ইস্যুতে উত্সাহিত যেখানে বিল্ড আউটপুটটি রেফারেন্সড ডিএলএল অন্তর্ভুক্ত করে না। তবে সংকলনটি সূক্ষ্মভাবে যায়।

ফিক্স:

কোনও পাঠ্য সম্পাদকে আপনার প্রকল্পগুলি দেখুন এবং সেগুলিতে ট্যাগ সহ রেফারেন্স সন্ধান করুন। সত্য বা মিথ্যা পছন্দ। "ব্যক্তিগত" হ'ল "অনুলিপি স্থানীয়" এর প্রতিশব্দ। ক্রিয়াগুলির কোথাও, এমএসবিল্ড নির্ভরতাগুলি সনাক্ত করতে গ্রহণ করছে, এটি আপনার নির্ভরতা অন্য কোথাও খুঁজে পেয়েছে এবং এটি অনুলিপি না করার সিদ্ধান্ত নিয়েছে।

সুতরাং, প্রতিটি .csproj / .vbproj ফাইলের মাধ্যমে যান এবং ম্যানুয়ালি ট্যাগগুলি সরান। পুনর্নির্মাণ, এবং সবকিছু ভিজ্যুয়াল স্টুডিও এবং এমএসবিল্ড উভয় ক্ষেত্রেই কাজ করে। একবার আপনি এই কাজটি শেষ হয়ে গেলে, আপনি আবার ফিরে যেতে পারেন এবং আপনার যেখানে মনে করা উচিত সেগুলি আপডেট করতে পারেন।

রেফারেন্স:

https://www.paraesthesia.com/archive/2008/02/13/what-to-do-if-copy-local-works-in-vs-but.aspx/


1

কোডে ডামি করার দরকার নেই
কেবল:

এক্সিকিউটেবল প্রকল্পে একটি রেফারেন্স যুক্ত করুন

বা / এবং নিশ্চিত করুন যে এক্সিকিউটেবল প্রজেক্টে রেফারেন্স "Copy Local"সেট হয়ে গেছে TRUE(যা আমার " দোষ ছিল ") মনে হচ্ছে বেস রেফারেন্সযুক্ত লাইব্রেরি-প্রকল্পের সেটিংসটি "ওভাররোট" করে ...


1

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

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


1
অনুলিপি Loal অক্ষম ছিল, এই সাহায্য stackoverflow.com/questions/15526491/...
codemirror

1

TLDR; ভিজ্যুয়াল স্টুডিও 2019 কেবল পুনঃসূচনা প্রয়োজন হতে পারে।

আমি Microsoft.NET.Sdk প্রকল্প ভিত্তিক প্রকল্পগুলি ব্যবহার করে এই পরিস্থিতির মুখোমুখি হয়েছি।

<Project Sdk="Microsoft.NET.Sdk">

বিশেষ করে:

  • Project1: লক্ষ্য .netstandard2.1
    • Microsoft.Extensions.Logging.Consoleনুগেটের মাধ্যমে রেফারেন্স
  • Project2: লক্ষ্য .netstandard2.1
    • Project1একটি প্রকল্প রেফারেন্স মাধ্যমে রেফারেন্স
  • Project2Tests: লক্ষ্য .netcoreapp3.1
    • Project2একটি প্রকল্প রেফারেন্স মাধ্যমে রেফারেন্স

পরীক্ষার প্রয়োগের সময়, আমি ত্রুটি বার্তাপ্রেরণটি পেয়েছি যা Microsoft.Extensions.Logging.Consoleপাওয়া যায়নি এটি প্রমাণ করে এবং এটি আউটপুট ডিরেক্টরিতে ছিল না

আমি যোগ করে সমস্যা এড়াতে করার সিদ্ধান্ত নিয়েছে Microsoft.Extensions.Logging.Consoleথেকে Project2, শুধুমাত্র ভিসুয়াল স্টুডিও এর Nuget ম্যানেজার তালিকা নি আবিষ্কার Microsoft.Extensions.Logging.Consoleযেমন ইনস্টল Project1, এটা উপস্থিতি সত্ত্বেও Project1.csprojফাইল।

ভিজ্যুয়াল স্টুডিওর একটি সহজ শাট ডাউন এবং পুনঃসূচনা একটি অতিরিক্ত রেফারেন্স যুক্ত করার প্রয়োজন ছাড়াই সমস্যার সমাধান করেছে। সম্ভবত এটি হারানো উত্পাদনশীলতার 45 মিনিটের সংরক্ষণ করবে :-)


আসলে আমি জিনিসগুলি পরীক্ষার পথে পুরো পিসি পুনরায় চালু করেছি তবে এটি আমার পক্ষে কাজ করেছে
Noman_1

0

আপনি একই প্রকল্পে মূল প্রকল্প এবং প্রজেক্টএক্স-এর বিল্ড আউটপুট পাথ উভয়ই সেট করতে পারেন, তারপরে আপনি সেই ফোল্ডারে আপনার প্রয়োজনীয় সমস্ত dlls পেতে পারেন।


0

আপনার প্রকল্পের প্রয়োগের টার্গেট। নেট ফ্রেমওয়ার্কের চেয়ে আপনার দ্বারা ব্যবহৃত নির্ভরশীল ডিএল লক্ষ্যযুক্ত। নেট ফ্রেমওয়ার্ক না রয়েছে তা নিশ্চিত করুন।

আপনি আপনার প্রকল্প নির্বাচন করে এটি পরীক্ষা করতে পারেন, তারপরে ALT + ENTER টিপুন, তারপরে বাম দিক থেকে অ্যাপ্লিকেশনটি নির্বাচন করুন এবং তারপরে আপনার প্রকল্পের লক্ষ্য ফ্রেমওয়ার্ক নির্বাচন করুন।

ধরুন, নির্ভরযোগ্য dll টার্গেট ফ্রেমওয়ার্ক = 4.0 এবং অ্যাপ্লিকেশন dll টার্গেট ফ্রেমওয়ার্ক = 3.5 তারপর এটি পরিবর্তন করুন 4.0

ধন্যবাদ!


0

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

সুতরাং আমার সমাধান: বৈশিষ্ট্য> নির্দিষ্ট সংস্করণ (মিথ্যা)


0

প্রকল্পগুলির মধ্যে একটিতে বিদ্যমান আইটেম হিসাবে ডিএলএল যুক্ত করুন এবং এটি বাছাই করা উচিত

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