visual-studio - microsoft - visual studio code




সমাধান মধ্যে প্রকল্প নির্ভরতা ব্যবহার করে MSBuild রেফারেন্স(DLL ফাইল) অনুলিপি না (12)

আমার ভিজুয়াল স্টুডিও সলিউশনে চারটি প্রকল্প রয়েছে (প্রত্যেকে .NET 3.5 লক্ষ্য করে) - আমার সমস্যার জন্য শুধুমাত্র এই দুটি গুরুত্বপূর্ণ:

  1. MyBaseProject <- এই ক্লাস লাইব্রেরী একটি তৃতীয় পক্ষের DLL ফাইল (elmah.dll) উল্লেখ করে
  2. MyWebProject1 <- এই ওয়েব অ্যাপ্লিকেশন প্রকল্পের MyBaseProject একটি রেফারেন্স আছে

আমি "elmah.dll" নির্বাচন করে "রেফারেন্স যুক্ত করুন ..." → "ব্রাউজ করুন" ট্যাবটি ক্লিক করে ভিজুয়াল স্টুডিও ২008 এ মাইস बेस প্রজেক্টে elmah.dll রেফারেন্স যোগ করেছি।

Elmah রেফারেন্স বৈশিষ্ট্য নিম্নরূপ:

  • Aliases - বিশ্বব্যাপী
  • কপি স্থানীয় - সত্য
  • সংস্কৃতি -
  • বর্ণনা - ASP.NET এর জন্য ত্রুটি লগিং মডিউল এবং হ্যান্ডলারস (ELMAH)
  • ফাইল প্রকার - সমাবেশ
  • পাথ - D: \ webs \ otherfolder \ _myPath \ __ সরঞ্জাম \ elmah \ Elmah.dll
  • সমাধান - সত্য
  • রানটাইম সংস্করণ - v2.0.50727
  • নির্দিষ্ট সংস্করণ - মিথ্যা
  • শক্তিশালী নাম - মিথ্যা
  • সংস্করণ - 1.0.11211.0

MyWebProject1 এ আমি প্রজেক্ট মাইবबेस প্রজেক্টের রেফারেন্স যোগ করেছি: "রেফারেন্স যোগ করুন ..." → "প্রকল্পগুলি" ট্যাব → "মাইবबेस প্রজেক্ট" নির্বাচন করে। নিম্নোক্ত সদস্যদের বাদে এই রেফারেন্সের বৈশিষ্ট্য একই:

  • বর্ণনা -
  • পথ - D: \ webs \ CMS \ MyBaseProject \ bin \ ডিবাগ \ MyBaseProject.dll
  • সংস্করণ - 1.0.0.0

যদি আমি ভিজ্যুয়াল স্টুডিওতে বিল্ড চালাই তবে elmah.dll ফাইলটি আমার MyWebProject1 এর bin ডিরেক্টরিতে অনুলিপি করে, MyBaseProject.dll বরাবর!

যাইহোক, যদি আমি সমাধান করার জন্য MSBuild পরিষ্কার করি এবং রান করি (D: \ webs \ CMS> C: \ উইন্ডোজ \ Microsoft.NET \ Framework \ v3.5 \ MSBuild.exe / t: Rebuild / p: কনফিগারেশন = ডিবাগ MyProject.sln ) elmah.dll MyWebProject1 এর bin ডিরেক্টরির মধ্যে অনুপস্থিত - যদিও বিল্ডটিতে কোনও সতর্কতা বা ত্রুটি নেই!

আমি ইতিমধ্যেই নিশ্চিত করেছি যে MyBaseProject এর .csproj মানটি "সত্য" মান সহ ব্যক্তিগত উপাদান রয়েছে (এটি ভিজ্যুয়াল স্টুডিওতে " স্থানীয় অনুলিপি " করার জন্য একটি উপনাম হওয়া উচিত):

<Reference Include="Elmah, Version=1.0.11211.0, Culture=neutral, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\mypath\__tools\elmah\Elmah.dll</HintPath>
    **<Private>true</Private>**
</Reference>

(ব্যক্তিগত ট্যাগটি .csproj এর XML এ ডিফল্টরূপে উপস্থিত হয় নি, যদিও ভিজ্যুয়াল স্টুডিওটি "অনুলিপি স্থানীয়" সত্য বলেছে। আমি "স্থানীয় অনুলিপি" মিথ্যা - সংরক্ষিত - তে স্যুইচ করেছি এবং এটি আবার আবার সত্য সেট করুন - সংরক্ষণ করুন!)

MSBuild সঙ্গে কি ভুল? কিভাবে আমি (elmah.dll) রেফারেন্সটি MyWebProject1 এর বিনতে অনুলিপি করব?

আমি প্রতিটি প্রকল্পের পোস্টbuild কমান্ড একটি পোস্ট বিল্ড কপি কর্ম যোগ করতে চান না! (কল্পনা করুন যে আমি অনেক প্রকল্প MyBaseProject উপর নির্ভর করে!)


Deadlydog এর প্রকল্প ব্যবহার করে,

Y => X => A => B ,

আমার সমস্যা ছিল যখন আমি Y বানিয়েছিলাম, এক্স থেকে সমাহারগুলি (এ এবং বি, তাদের সব 15) Y এর bin ফোল্ডারে দেখানো হয় নি।

আমি Y থেকে রেফারেন্স এক্স মুছে ফেলার মাধ্যমে, সমাধান, বিল্ড, তারপর এক্স রেফারেন্স (একটি প্রকল্প রেফারেন্স) পুনরায় যোগ করে সমাধান করেছি এবং Y, bin ফোল্ডারে সংরক্ষণ, বিল্ড এবং A এবং B দেখানো শুরু করেছিলাম।


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

যেখানে প্রজেক্টএক্স এবং প্রজেক্টওয়াই পিতা-মাতা / শিশু নির্দেশিকা এবং প্রজেক্টএক্স রেফারেন্সগুলি A.dll যা পরিবর্তে B.dll, এবং B.dll ডিরেক্টরি কাঠামোর বাইরে থাকে, যেমন রুট (প্যাকেজ) -এ একটি Nuget প্যাকেজ, এ। ডিল অন্তর্ভুক্ত করা হবে, কিন্তু B.dll হবে না।


আমার মুখোমুখি হওয়া সমস্যাটি ছিল একটি প্রকল্প যা একটি লাইব্রেরী প্রকল্পের উপর নির্ভরশীল। নির্মাণ করার জন্য আমি এই পদক্ষেপগুলি অনুসরণ করছিলাম:

msbuild.exe myproject.vbproj /T:Rebuild
msbuild.exe myproject.vbproj /T:Package

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

msbuild.exe myproject.vbproj /T:Rebuild;Package

আমার কোন ধারণা নেই কেন এই কাজটি বা কেন এটি প্রথম স্থানে ছিল না। কিন্তু আশা করি যে সাহায্য করে।


আমি আজ একই সমস্যা ছিল, এবং এই অবশ্যই আপনার প্রশ্নের উত্তর নেই। কিন্তু আমি প্রত্যেককে জানাতে চাই, এবং সম্ভবত অন্তর্দৃষ্টি একটি চমক প্রদান।

আমি একটি ASP.NET অ্যাপ্লিকেশন আছে। বিল্ড প্রক্রিয়া পরিষ্কার এবং তারপর বিল্ড সেট করা হয়।

আমি দুটি Jenkins CI স্ক্রিপ্ট আছে। উৎপাদন জন্য এক এবং স্টেজিং জন্য এক। আমি স্টেজিং আমার আবেদন স্থাপন এবং সবকিছু জরিমানা কাজ। উত্পাদনে স্থাপন করা হয়েছে এবং রেফারেন্স করা একটি DLL ফাইল অনুপস্থিত ছিল। এই DLL ফাইল শুধু প্রকল্পের রুট ছিল। কোন NuGet রিপোজিটরি নেই। ডিএলএল do not copy করার জন্য সেট ছিল।

সিআই স্ক্রিপ্ট এবং অ্যাপ্লিকেশন দুটি স্থাপনার মধ্যে একই ছিল। স্টেজিং পরিবেশে পরিষ্কার ও স্থাপনার পরেও এএসপি.NET অ্যাপ্লিকেশন ( bin/ ) এর স্থাপনার অবস্থানে DLL ফাইলটি প্রতিস্থাপিত হয়। এই উৎপাদন পরিবেশের ক্ষেত্রে ছিল না।

এটি একটি টেস্টিং শাখায় পরিণত হয়েছে আমি এই ডিলি ফাইলটি অনুলিপি করার জন্য বিল্ড প্রক্রিয়াতে একটি ধাপ যোগ করেছি। এখন যে অংশটি বেরিয়ে আসার সময় একটু সময় লেগেছিল। সিআই পদ্ধতি নিজেই পরিষ্কার ছিল না। ডিএলএলটি ডাইরেক্টরি ডাইরেক্টরিতে চলে গিয়েছিল এবং এটি দুর্ঘটনাক্রমে ASP.NET .zip ফাইলের সাথে প্যাকেজ করা হয়েছিল। উত্পাদন শাখার DLL ফাইলটি একই ভাবে অনুলিপি করা হয়নি এবং এটি ঘটনাক্রমে এইভাবে স্থাপন করা হয়নি।

TLDR; চেক করুন এবং আপনার বিল্ড সার্ভার কি করছে তা নিশ্চিত করুন।


আমি একই সমস্যা ছিল।

আপনার প্রোজেক্টের ফ্রেমওয়ার্ক সংস্করণটি আপনি রেফারেন্সে থাকা DLL এর ফ্রেমওয়ার্ক সংস্করণের মতো কিনা তা পরীক্ষা করুন।

আমার ক্ষেত্রে, আমার ক্লায়েন্টটি "ফ্রেমওয়ার্ক 4 ক্লায়েন্ট" ব্যবহার করে সংকলিত হয়েছিল এবং DLL "ফ্রেমওয়ার্ক 4" তে ছিল।


আমি শুধু এই মত এটা মোকাবেলা। আপনার রেফারেন্স বৈশিষ্ট্য যান এবং এই কাজ:

Set "Copy local = false"
Save
Set "Copy local = true"
Save

এবং এটাই.

ভিজ্যুয়াল স্টুডিও ২010 প্রাথমিকভাবে রাখেনি: <private>True</private> রেফারেন্স ট্যাগে এবং "স্থানীয় অনুলিপি" সেটিকে ট্যাগ তৈরি করার মিথ্যা কারণগুলিতে সেট করে। এর পরে এটি সত্য এবং মিথ্যা অনুযায়ী সেট করা হবে।


এখানে দেখুন:

এই MSBuild ফোরাম থ্রেড আমি শুরু

আপনি আমার অস্থায়ী সমাধান / workaround সেখানে পাবেন!

(MyBaseProject এর elmah.dll থেকে elmah.dll এর কিছু ক্লাসের (যাই হোক না কেন) উল্লেখ করা হচ্ছে এমন কিছু কোড দরকার যা MyWebProject1 এর বিনতে অনুলিপি করা হচ্ছে!)


এটি আপনার প্রোজেক্টে একটি। .targets ফাইল যোগ করার এবং প্রকল্পটিতে অন্তর্ভুক্ত করার জন্য এটি সেট করার প্রয়োজন।

পদ্ধতির জন্য এখানে আমার উত্তর দেখুন।


নিশ্চিত করুন যে উভয় প্রকল্প একই। নেট সংস্করণটিও স্থানীয় সম্পত্তি কপি পরীক্ষা করে দেখুন তবে এটি ডিফল্ট হিসাবে true হওয়া উচিত


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

কিছু উদাহরণ অন্যান্য পোস্টে পাওয়া যাবে


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

আপনার elmah.dll রেফারেন্সের জন্য যদি আপনি এটি সরাসরি কোডে উল্লেখ না করেন তবে আপনি এটি আপনার প্রোজেক্টে একটি আইটেম হিসাবে যুক্ত করতে পারেন এবং সামগ্রীতে বিল অ্যাকশন সেট করতে এবং Always আউটপুট ডিরেক্টরিতে অনুলিপি সেট করতে পারেন।


যেমন অ্যালেক্স Burtsev একটি এক্সএএমএল রিসোর্স অভিধানে, বা আমার ক্ষেত্রে, শুধুমাত্র XAML ব্যবহার করা হয় এবং কোড পিছনে না যে কোনো মন্তব্যের মধ্যে উল্লেখ, MSBuild দ্বারা 'ব্যবহার' বলে মনে করা হয় না।

তাই কিছু কোড পিছনে সমাবেশে একটি ক্লাস / উপাদান একটি ডামি রেফারেন্স আপ নতুনভাবে যথেষ্ট ছিল যে সমাবেশ আসলে ছিল ব্যবহার করে MSBuild যথেষ্ট convinced।





project