সমাবেশ সংস্করণ সংখ্যা বজায় রাখার জন্য সেরা অনুশীলন / গাইডেন্স


154

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

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


1
এটি দেখুন ... কোডিংহরর
রাহুল সোনি

উত্তর:


211

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

নিম্নলিখিতটি ধরে নেওয়া হয়েছে যে আপনি উত্স নিয়ন্ত্রণের একটি ফর্ম এবং একটি বিল্ড সার্ভার ব্যবহার করেন। প্রসঙ্গে আমরা TeamCity এবং সাবভার্সন / গিট ব্যবহার করি । টিমসিটি একটি ছোট (10) সংখ্যক প্রকল্পের জন্য বিনামূল্যে এবং এটি একটি খুব ভাল বিল্ড সার্ভার তবে আরও কিছু রয়েছে, যার কয়েকটি সম্পূর্ণ নিখরচায়।

সংস্করণ সংখ্যার অর্থ কী

কোনও সংস্করণটি কোনও ব্যক্তির অর্থ কী, তা অন্যটির থেকে আলাদা কিছু বোঝাতে পারে, সাধারণ কাঠামোটি হ'ল বড়, গৌণ, ম্যাক্রো, মাইক্রো। সংস্করণ নম্বরটি আমি যেভাবে দেখছি তা হল এটি দুটি ভাগে বিভক্ত। প্রথমার্ধে মূল সংস্করণ (মেজর) এবং কোনও কী আপডেট (মাইনর) বর্ণনা করে। দ্বিতীয়ার্ধটি কখন এটি তৈরি হয়েছিল এবং উত্স কোড সংস্করণটি কী তা নির্দেশ করে। সংস্করণ নম্বরগুলি প্রসঙ্গের উপর নির্ভর করে বিভিন্ন জিনিস বোঝায়, এটি কি কোনও এপিআই, ওয়েব অ্যাপ্লিকেশন ইত্যাদি depending

MajorMinorBuildRevision

  • Revision এটি আসলে কী তৈরি হয়েছিল তা সনাক্ত করতে উত্স নিয়ন্ত্রণ থেকে নেওয়া নম্বর।
  • Buildএটি একটি ক্রমবর্ধমান সংখ্যা যা বিল্ড সার্ভারে একটি নির্দিষ্ট বিল্ড সন্ধান করতে ব্যবহার করা যেতে পারে। এটি একটি গুরুত্বপূর্ণ সংখ্যা কারণ বিল্ড সার্ভারটি প্যারামিটারগুলির বিভিন্ন সেট দিয়ে দু'বার একই উত্স তৈরি করেছে। উত্স সংখ্যার সাথে মিলিতভাবে বিল্ড নম্বরটি ব্যবহার করা আপনাকে কী তৈরি হয়েছিল এবং কীভাবে তা সনাক্ত করতে সহায়তা করে।
  • Minorপাবলিক ইন্টারফেসে উল্লেখযোগ্য পরিবর্তন হলেই এটি পরিবর্তন করা উচিত change উদাহরণস্বরূপ, এটি যদি একটি এপিআই হয় তবে গ্রাসকারী কোডটি কি এখনও সংকলন করতে সক্ষম হবে? মেজর নম্বর পরিবর্তিত হলে এই সংখ্যাটি শূন্যে পুনরায় সেট করা উচিত।
  • Majorআপনি কী পণ্যটির সংস্করণটি নির্দেশ করছেন তা বোঝায়। উদাহরণস্বরূপ সমস্ত ভিজ্যুয়াল স্টুডিও ২০০৮ এর এসেম্বলির মেজর 9 এবং ভিজ্যুয়াল স্টুডিও 2010 হ'ল 10।

বিধি ব্যতিক্রম

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

MajorMinorMacroBuild

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

কি সেট করতে হবে

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

  • ১.২.০.০ (অ্যাসেম্বলি ভার্সন)
  • 1.2.3.4 (ফাইল ভার্সন)

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

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

কিভাবে এটি একসাথে তারের

উপরের সমস্তটি আপনি ম্যানুয়ালি করতে পারতেন তবে এটি খুব সময় সাশ্রয়ী হবে, নীচে আমরা কীভাবে প্রক্রিয়াটিকে স্বয়ংক্রিয় করব। প্রতিটি পদক্ষেপ চালানো যায়।

  • সমস্ত প্রজেক্টের એસেম্বলিআইএনফো ফাইলগুলি থেকে বৈশিষ্ট্য AssemblyVersionএবং AssemblyFileVersionবৈশিষ্ট্যগুলি সরান ।
  • একটি সাধারণ সমাবেশ তথ্য ফাইল তৈরি করুন (একে VersionInfo.cs কল করুন) এবং আপনার সমস্ত প্রকল্পের সাথে এটি একটি লিঙ্কযুক্ত আইটেম হিসাবে যুক্ত করুন।
  • "0.0.0.0" এর মান সহ সংস্করণে যুক্ত করুন AssemblyVersionএবং AssemblyFileVersionগুণাবলী।
  • এমএসবিল্ড প্রকল্প তৈরি করুন যা আপনার সমাধান ফাইল তৈরি করে।
  • বিল্ড করার পূর্বে কোনও কার্যে যুক্ত করুন যা ভার্সনআইএনফোস আপডেট করে। এখানে অনেকগুলি ওপেন সোর্স এমএসবিল্ড গ্রন্থাগার রয়েছে যা একটি এসেম্বলিআইএনফো কার্যকে অন্তর্ভুক্ত করে যা সংস্করণ নম্বর নির্ধারণ করতে পারে। এটি কেবল একটি স্বেচ্ছাসেবী সংখ্যা এবং পরীক্ষায় সেট করুন।
  • বিল্ড নম্বরের প্রতিটি বিভাগের জন্য একটি সম্পত্তি যুক্ত একটি সম্পত্তি গোষ্ঠী যুক্ত করুন। আপনি এখানে বড় এবং নাবালিকাকে সেট করেছেন set বিল্ড এবং রিভিশন নম্বরটি আর্গুমেন্ট হিসাবে পাস করা উচিত।

সাবস্ট্রেশন সহ:

<PropertyGroup>
    <Version-Major>0</Version-Major>
    <Version-Minor>0</Version-Minor>
    <Version-Build Condition=" '$(build_number)' == '' ">0</Version-Build>
    <Version-Build Condition=" '$(build_number)' != '' ">$(build_number)</Version-Build>
    <Version-Revision Condition=" '$(revision_number)' == '' ">0</Version-Revision>
    <Version-Revision Condition=" '$(revision_number)' != '' ">$(revision_number)</Version-Revision>
</PropertyGroup>

আশা করি আমি পরিষ্কার হয়েছি তবে অনেক কিছু জড়িত আছে। কোন প্রশ্ন জিজ্ঞাসা করুন। আরও সংক্ষিপ্ত ব্লগ পোস্ট একসাথে রাখতে আমি কোনও প্রতিক্রিয়া ব্যবহার করব।


আপনি কি গিটহাবের সংস্করণ ট্যাগগুলি ব্যবহার করে বিবেচনা করেছেন? আমি যে খুব ধীরে ধীরে ধাঁধা এটি ফিট করতে পারে সম্পর্কে খুব কৌতূহলী।
raRaRa

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

57

.NET- এ [এসেম্বলি ভার্সন] খুব বড় বিষয়। মাইক্রোসফ্ট দ্বারা উত্সাহিত একটি দর্শন হ'ল আপনি এটিকে স্বয়ংক্রিয়ভাবে বৃদ্ধি দিন এবং সমাবেশের উপর নির্ভর করে এমন সমস্ত প্রকল্প পুনরায় সংযোগ করতে বাধ্য করেন। আপনি যদি বিল্ড সার্ভার ব্যবহার করেন তবে ঠিক আছে Works এটি করা কখনই ভুল কাজ নয় তবে তরোয়াল বহনকারী লোকদের থেকে সাবধান থাকুন।

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

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

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

বরং আপনি নিজের পছন্দটি তৈরি করতে বিল্ড প্রক্রিয়া এবং মুক্তির চক্রকে কতটা ভাল নিয়ন্ত্রণ করতে পারবেন তা আপনার এবং আপনার আত্মবিশ্বাসের উপর নির্ভর করে। তা ছাড়া, [এসেম্বলিফিলিভিশন] স্বয়ংক্রিয়ভাবে স্বয়ংক্রিয়ভাবে বৃদ্ধি করা খুব উপযুক্ত। তবে অসুবিধাটি যে এটি সমর্থন করে না


11

আপনি স্বতঃবৃদ্ধির জন্য সংস্করণ নম্বরটির বিল্ড অংশটি ব্যবহার করতে পারেন।

[assembly: AssemblyVersion("1.0.*")]

আপনার পরিবেশে একটি পরীক্ষার সংস্করণ হল এমন একটি সংস্করণ যা একটি বিল্ড সংস্করণ রয়েছে! = 0 মুক্তির পরে আপনি গৌণ অংশটি বৃদ্ধি করেন এবং বিল্ড অংশটি 0 তে সেট করেন, এভাবেই আপনি প্রকাশিত সমাবেশগুলি শনাক্ত করবেন।

আপনি যদি জিএসি তে আপনার সমাবেশগুলি ইনস্টল করেন তবে আপনার জিএসি সময়ের সাথে সাথে প্রচুর স্বতন্ত্র সংস্করণে প্লাবিত হয়, তাই এটি মনে রাখবেন। তবে আপনি যদি কেবলমাত্র স্থানীয়ভাবে dlls ব্যবহার করেন তবে আমি মনে করি এটি একটি ভাল অনুশীলন।


মুক্তির সংস্করণগুলির জন্য আমি 0 টি বিল্ড নম্বর পছন্দ করি।
অধ্যাপক 11

1
অবশ্যই এর অর্থ হ'ল প্রতিটি সমাবেশের সাথে আপনার সমাবেশের শক্ত নাম বদলে যাবে, আপনি এটি চান বা না চান।
রিচার্ড

9

যোগ করা হচ্ছে Bronumskis উত্তর , আমি নির্দেশ যে শব্দার্থিক ভারশনিং 2.0 মান পরে চান semver.org , Major.Minor.Build.Revisionনিয়ম করে একটি সংখ্যা বাড়িয়ে পর, ডানদিকে সব নিয়মিত মান শূন্য অনুযায়ী পুনরায় সেট করা হবে কারণে অবৈধ হবে।

মান অনুসরণ করার আরও ভাল উপায় হ'ল ব্যবহার করা Major.Minor+Build.Revision। এটি অবিচ্ছিন্নভাবে ব্যবহারের জন্য নয় AssemblyVersionAttribute, তবে পরিবর্তে একটি কাস্টম বৈশিষ্ট্য বা স্ট্যাটিক শ্রেণি ব্যবহার করা যেতে পারে।

মেটা-রানার পাওয়ার প্যাক ব্যবহার করে টিমসিটি-তে সেমভার পাওয়া উচিত। গিট-প্রবাহ সহ গিটের জন্য (বিশেষত। নেট বিশ্বে), আমি গিট ভার্সনকে সহায়ক বলে মনে করেছি।


2
আকর্ষণীয়, আমি এটি পরীক্ষা করে দেখব। আপনি উল্লিখিত সংস্করণ নম্বর ফর্ম্যাটটি সমাবেশের তথ্য সংস্করণ বৈশিষ্ট্যে ব্যবহার করা যেতে পারে।
ব্রোনমস্কি

1

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

... উদাহরণস্বরূপ: 1.0.0। *

সংরক্ষিত - এটি ভবিষ্যতে কোনও পরিবর্তন করতে চাইলে এটি অতিরিক্ত নমনীয়তা যুক্ত করে। তবে ডিফল্ট হিসাবে এটি 0 হিসাবে রাখুন।

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

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