আমার কেন ভিজুয়াল স্টুডিও সমাধান ফাইলগুলির পরিবর্তে এমএসবিল্ড ব্যবহার করা উচিত?


21

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

সুতরাং, কেন আমরা সমাধান ফাইলগুলি থেকে একটি এমএসবিল্ড 'মেকফিল' এ স্থানান্তরিত হওয়া উচিত? আমাদের কাছে এমন কয়েকটি রিলিজ রয়েছে যা # ডিফাইন (বৈশিষ্ট্যযুক্ত বিল্ডস) দ্বারা পৃথক হয় তবে বেশিরভাগ অংশের জন্য সবকিছু কাজ করে।

সবচেয়ে বড় উদ্বেগটি হ'ল এখন প্রকল্প / উত্স কোড যুক্ত করার সময় আমাদের দুটি সিস্টেম বজায় রাখতে হবে ।

হালনাগাদ:

লোকেরা নিম্নলিখিত তিনটি উপাদানটির জীবনচক্র এবং ইন্টারপ্লেতে আলোকপাত করতে পারে?

  1. ভিজ্যুয়াল স্টুডিও .sln ফাইল
  2. অনেকগুলি প্রকল্প স্তরের .csproj ফাইল (যা আমি একটি "সাব" এমএসবিল্ড স্ক্রিপ্ট বুঝতে পারি)
  3. কাস্টম এমএসবিল্ড স্ক্রিপ্ট

এটি কি নিরাপদ বলা যায় যে .sln এবং .csproj ভিজ্যুয়াল স্টুডিও আইডিই জিইআইয়ের মধ্যে থেকে যথারীতি গ্রাস করা / রক্ষণাবেক্ষণ করা হয় যখন কাস্টম এমএসবিল্ড স্ক্রিপ্টটি হাতে লেখা এবং সাধারণত ইতিমধ্যে বিদ্যমান পৃথক .csproj "যেমনটি" ব্যবহার করেন? রক্ষণাবেক্ষণের ক্ষেত্রে ওভারল্যাপ / ডুপ্লিকেট হ্রাস করতে দেখতে এটি একমাত্র উপায় ...

অন্যান্য লোকদের অপারেশনাল অভিজ্ঞতা থেকে এই বিষয়ে কিছু আলোকপাতের প্রশংসা করি


So, why should we bother migrating from solution files to an MSBuild 'makefile'?প্রথমে আপনাকে জানাতে হবে আপনি কেন এটি বিবেচনা করছেন? সমাধান ফাইল কি যথেষ্ট নয়?
jgauffin

3
কারণ এটি আরও ভাল অনুশীলন হিসাবে খ্যাতিমান। আপনার শেষ প্রশ্নের জন্য; সম্ভবত এটি হয়, সম্ভবত এটি না। এই কারণেই এই প্রশ্নটি এটি একটি পরিষ্কার উত্তরের জন্য অন্বেষণ করবে।
ডিপস্পেস 101

2
Because it's reputed to be better practiceকোথায়?
jgauffin

3
বিল্ড থেকে আইডিই (স্লান ফাইল) আলাদা করা অবশ্যই একটি ভাল এসই ডিজাইন। কোডিংহরর . com/blog/2007/10/… এ জেফ এর সম্পর্কে লিখেছেন যদি আপনি বিশদ চান desire প্লাসটি কেবল বিল্ড সংকলনের পরিবর্তে রিলিজ বিল্ড স্ক্রিপ্টের অংশ হিসাবে পরীক্ষাগুলি এমনকি সফ্টওয়্যার প্যাকেজিং (সেটআপ.এক্সই বা এমএসআই) ফায়ার করা খুব ভাল।
ডিপস্পেস 101

উত্তর:


16

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

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


সুতরাং আপনি ভিজুয়াল স্টুডিওতে sln + csproj ব্যবহার করেন এবং তারপরে বিল্ড সার্ভারে csproj এর + কাস্টম এমএসবিল্ড স্ক্রিপ্টটি একই? আমি প্রশ্নটি কিছুটা স্পষ্ট করে দিয়েছি। ধন্যবাদ!
ডিপস্পেস 101

হ্যাঁ, তারা কার্যত একই।
ওয়াইয়াট বার্নেট

15

এমএসবিল্ডের মেকফাইলটি হ'ল .sln ফাইল (বা vcproj ফাইল)।

একটি সাধারণ এমএসবিল্ড কমান্ড লাইনটি এরকম হবে:

msbuild /p:Configuration=Release BigProject.sln

এমএসবিল্ড ব্যবহারের বিষয়টি হ'ল আপনি বিল্ড প্রক্রিয়াটিকে স্ক্রিপ্ট করতে এবং স্বয়ংক্রিয় করতে পারেন। আপনি এটি সম্পর্কে অবহিত ছিলেন বা না থাকুন, টিমসিটি ম্যাসবিল্ডটি সমস্তরকম ব্যবহার করে চলেছে।


বিভিন্ন উপাদানগুলির সম্ভাব্য ওভারল্যাপের উপরের অংশে আপনি কী ভাবছেন? আমি (
আশাবাদী

3

আমাকে এই প্রশ্নটি গ্রহণের প্রস্তাব দিন।

যদিও আপনি অবশ্যই আপনার .SLN ফাইলটিকে আপনার 'বিল্ড প্রক্রিয়া' হিসাবে ব্যবহার করতে পারেন তবে ফাইলটি নিজেই একটি বিল্ড প্রক্রিয়া গঠন করে না। সলিউশন ফাইলটি সত্যই ভিজ্যুয়াল স্টুডিওর একটি অংশ এবং বিকাশের জন্য ব্যবহৃত হয়। তবে ভিজ্যুয়াল স্টুডিও বিল্ড এবং রিলিজ প্রক্রিয়ার একটি অংশ মাত্র। আপনার বিল্ড পরিচালনা করতে আপনি সলিউশনের উপর নির্ভর করতে পারবেন না এবং সমাধান অবশ্যই কোনও স্কেলযোগ্য বিল্ড পরিস্থিতি সরবরাহ করে না।

একটি বিল্ড প্রক্রিয়া প্রতিষ্ঠার পুরো উদ্দেশ্য নির্ভরযোগ্য বিল্ড তৈরি করা। এটি বলার অপেক্ষা রাখে না যে বিল্ড প্রক্রিয়াটি এত নির্ভরযোগ্য যে বিল্ড কনফিগারেশনটি গুরুত্বপূর্ণ নয়, আপনি একটি পূর্বাভাসযোগ্য বিল্ড আউটপুট পাবেন। প্রতিবার, প্রতিটি মেশিন। পূর্বাভাসযোগ্য এবং নির্ভরযোগ্য নির্মাণের ফলাফল হ'ল পরীক্ষা, স্থাপনা এবং প্রকাশের প্রক্রিয়াটি তখন উচ্চতর স্বয়ংক্রিয়ভাবে তৈরি করা যায়, যা মানুষের ত্রুটির ঝুঁকি আরও কমিয়ে দেয়।

একটি বিল্ড প্রক্রিয়া স্থাপনের জন্য একটি বিনিয়োগের প্রয়োজন, তবে কিছু ক্ষেত্রে বিনিয়োগ প্রয়োজন। এখানে কিছু কারণ রয়েছে যা একটি মিসবিল্ড প্রক্রিয়াটিকে সমর্থন করে:

  • আপনার পণ্যটিতে একাধিক টিম রয়েছে (ক্রস-ক্রিয়ামূলক বা অন্যথায়) যারা একই টিম প্রকল্পে কাজ করছেন
  • আপনার প্রতিষ্ঠানের একটিমাত্র টিম প্রকল্প রয়েছে (traditionalতিহ্যগত দোকানগুলির 99%, এমনকি 200+ বিকাশকারীদের ক্ষেত্রেও এটি হওয়া উচিত)
  • আপনার কাছে 20 টিরও বেশি প্রকল্প রয়েছে যাগুলি নির্মাণ করা দরকার, যার মধ্যে কিছুর উপর অন্যের উপর নির্ভরশীলতা রয়েছে এবং বিভিন্ন দল তাদের দ্বারা রক্ষণাবেক্ষণ করে
  • আপনার পণ্য একাধিক। নেট প্রযুক্তি (সি #, সি ++, ভিবি, এফ #, এএসপি। নেট, ইত্যাদি), এমনকি নন-নেট প্রযুক্তিগুলি (গ্রান্ট, নোড, এনপিএম, জাভা, ইত্যাদি) অন্তর্ভুক্ত করে
  • আপনার পণ্যটির ভারী ওজন নির্ভরতা রয়েছে বা একটি হেভিওয়েট প্ল্যাটফর্মের শীর্ষে নির্মিত। শেয়ারপয়েন্ট, উদাহরণ হিসাবে

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

একটি রেফারেন্স হিসাবে, আমি সাইয়েদ ইব্রাহিম হাশিমির এই বইটি পরীক্ষা করে দেখার সুপারিশ করব: http://www.amazon.com/Inside-Mic Microsoft- বিল্ড- ইঞ্জিন- ফাউন্ডেশন / dp / 0735645248 / ref = sr_1_fkmr0_1 ? ie = UTF8&qid = 1412014650&sr = 8-1-fkmr0 & কীওয়ার্ড = msbuild + + নির্ভরযোগ্য + + বিল্ড


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

আপনার সংস্থার জন্য "আপনার সংস্থার একটিমাত্র টিম প্রকল্প রয়েছে" এর ব্যাখ্যাটির জন্য +1। এই জাতীয় ছোট দোকানে 'পণ্য' বা 'প্রকল্প' এর মতো জিনিসের সীমানা হিসাবে একাধিক টিম প্রকল্প ব্যবহার করা লোক দেখে আমার কষ্ট হয়। আমি একক দল প্রকল্পের পদ্ধতি গ্রহণ করেছি এবং আশা করি কখনই আর ফিরে যেতে হবে না।
জনজাজ

2

এই প্রশ্নটি আমি কয়েক মাস আগে নিজেকে জিজ্ঞাসা করেছি! আমাদের সুন্দরভাবে সবকিছু সেট আপ ছিল:

  • সংগ্রহস্থলগুলির মূলটিতে খুব ভাল সমাধান ফাইল
  • টিমসিটিতে কনফিগার করা পদক্ষেপগুলি তৈরি করুন like
    • নিউগেট প্যাকেজ পুনরুদ্ধার করুন
    • সমাধান তৈরি করুন
    • রান ইউনিট টেস্ট
    • ইন্টিগ্রেশন পরীক্ষার পরিবেশ সেট আপ করুন
    • ইন্টিগ্রেশন পরীক্ষা চালান
    • একীকরণ পরীক্ষার পরিবেশ ছিন্ন
    • একটি স্থাপনা প্যাকেজ তৈরি করুন
    • মাইগ্রেশন স্ক্রিপ্ট তৈরি করুন

এবং তারপরে, যখন এটি পুনরুত্পাদনযোগ্যতার কথা আসে তখন এটি স্পষ্ট হয়ে যায় যে এটি কম। আপনি যখন TeamCity কে আপনার বিল্ড স্ক্রিপ্ট হতে দেবেন তখন আপনার নিজের ডেভেলপমেন্ট মেশিনে নির্ভরযোগ্য, অনুরূপ ফলাফলগুলি পুনরুত্পাদন করা শক্ত হয়ে যায়।

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

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


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