ভিজুয়াল স্টুডিও ব্যবহার করার সময় কি আমি স্বয়ংক্রিয়ভাবে ফাইল বিল্ড সংস্করণটি বাড়িয়ে দিতে পারি?


358

আমি কেবল ভাবছিলাম যে আমি কীভাবে স্বয়ংক্রিয়ভাবে ভিজুয়াল স্টুডিও (2005) ব্যবহার করে আমার ফাইলগুলির বিল্ড (এবং সংস্করণ?) বাড়িয়ে তুলতে পারি।

যদি আমি বলার বৈশিষ্ট্যগুলি সন্ধান করি C:\Windows\notepad.exeতবে সংস্করণ ট্যাবটি "ফাইল সংস্করণ: 5.1.2600.2180" দেয়। আমি এই শীতল নম্বরগুলি আমার dll এর সংস্করণেও পেতে চাই, 1.0.0.0 সংস্করণ নয়, যা এর মুখোমুখি হোন যে এটি কিছুটা নিস্তেজ is

আমি কয়েকটি জিনিস চেষ্টা করেছিলাম, তবে মনে হচ্ছে এটি বাকী কার্যকারিতা নয়, বা সম্ভবত আমি ভুল জায়গায় খুঁজছি (যথারীতি)।

আমি মূলত ওয়েব প্রকল্পের সাথে কাজ করি ....

আমি উভয়ের দিকে তাকালাম:

  1. http://www.codeproject.com/KB/dotnet/Auto_Increment_Version.aspx
  2. http://www.codeproject.com/KB/dotnet/build_versioning.aspx

এবং কিছু বিশ্বাস করার পক্ষে এতটা প্রচেষ্টা বিশ্বাস করা যায় না এটি স্ট্যান্ডার্ড অনুশীলন।

সম্পাদনা: এটি VS2005 এ কার্যকর হয় না যতদূর আমি বলতে পারি ( http://www.codeproject.com/KB/dotnet/AutoIncrementVersion.aspx )


1
ওয়াইল্ড কার্ড কেবল এসেম্বলি
ভার্সনের

VS2005- এ সি ++ প্রকল্পের জন্য কাজ করে এমন কোনও সমাধান রয়েছে কি? সমস্ত উত্তর। নেট থেকে পুনরায় সম্পর্কিত বলে মনে হচ্ছে। সম্পর্কিত প্রশ্ন । ধন্যবাদ
Deanna

নেট কোর প্রকল্পগুলিতে এসেম্বলি ভার্সন অটো-ইনক্রিমেন্ট ডিফল্টরূপে কাজ করে না। আপনাকে সিএসপিজে <ডিটারিমেটিক> মিথ্যা </ ডিটারিমেটনিক> যুক্ত করতে হবে। দেখুন ভিসুয়াল স্টুডিও 2017 (.NET কোর) এ অটো ভারশনিং
মাইকেল Freidgeim

উত্তর:


434

ভিজ্যুয়াল স্টুডিও ২০০৮-এ, নিম্নলিখিতগুলি কাজ করে।

এসেম্বলিআইএনফো ফাইলগুলি সন্ধান করুন এবং এই 2 লাইনটি সন্ধান করুন:

[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

আপনি এটি এটিকে চেষ্টা করে দেখতে পারেন:

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

তবে এটি আপনাকে পছন্দসই ফলাফল দেয় না, আপনি 1.0 এর একটি পণ্য সংস্করণ এবং * 1.0.0.0 এর একটি ফাইল সংস্করণ দিয়ে শেষ করবেন । আপনি যা চান তা নয়!

তবে আপনি যদি এই লাইনের দ্বিতীয়টি সরিয়ে থাকেন এবং স্রেফ:

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

তারপরে সংকলকটি ফাইল সংস্করণটিকে পণ্যের সংস্করণের সমান হিসাবে সেট করবে এবং আপনি একটি স্বয়ংক্রিয়ভাবে বর্ধনশীল পণ্য এবং সিঙ্কে থাকা ফাইল সংস্করণে আপনার পছন্দসই ফলাফল পাবেন। যেমন 1.0.3266.92689


2
এটি অন্য যে কোনও কিছুর মতোই ভাল কাজ করে এবং ভিএস ২০০৫ এ কাজ করে। আমি 1.0.1.56 মত কিছু মূলদ সংখ্যার জন্য প্রত্যাশী ছিল পরিবর্তে আমি 1.0.3266.30135 পেতে কিন্তু অন্তত এটা (যদিও কিছু র্যান্ডম সংখ্যা দ্বারা: ডি) বৃদ্ধি পায়
সত্ত্বেও

14
ওহ আমি কেবল এটি পড়েছি: এটি স্বয়ংক্রিয়ভাবে শেষের দুটি নম্বর তারিখটি (কোনও কোনও দিন থেকে কয়েক দিনের মধ্যে) এবং সময়টি (মধ্যরাত থেকে অর্ধ সেকেন্ড) সহ পূরণ করবে
সত্ত্বেও

20
এটি কাজ করার জন্য এসেম্বলিফিলি সংস্করণ বৈশিষ্ট্যটি অপসারণ করার জন্য দুর্দান্ত আহ্বান!
ডেভিড ফাইভ্রে

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

27
@ ডিডি 59 টি 'বিল্ড' 1 লা 2000 জানুয়ারীর পরের দিন; 'রিভিশন'টি মধ্যরাত থেকে সেকেন্ড হয় 2 দ্বারা বিভক্ত (অর্ধ সেকেন্ড নয়, তবে দুই-দ্বিতীয় বিরতি)। এখানে দেখুন: স্ট্যাকওভারফ্লো.com
ক্রিশ্চিয়ান ডায়াকোনস্কু

154

এসেম্বলিআইএনফো ফাইলগুলি খুলুন এবং পরিবর্তন করুন

// You can specify all the values or you can default the Build and Revision Numbers 
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

প্রতি

[assembly: AssemblyVersion("1.0.*")]
//[assembly: AssemblyFileVersion("1.0.0.0")]

আপনি প্রকল্প -> বৈশিষ্ট্য -> সমাবেশ তথ্য গিয়ে আইডিইতে এটি করতে পারেন

এটি আপনাকে কেবল অ্যাসেম্বলি সংস্করণ বৃদ্ধি করতে দেয় এবং আপনাকে এটি প্রদান করবে

সমাবেশ ফাইল সংস্করণ: একটি ওয়াইল্ডকার্ড ("*") এই ক্ষেত্রে অনুমোদিত নয়

বার্তা বাক্স যদি আপনি ফাইল সংস্করণ ক্ষেত্রে একটি * রাখার চেষ্টা করেন।

সুতরাং কেবল এসেম্বলিংফোস খুলুন এবং ম্যানুয়ালি এটি করুন।


হ্যাঁ আমি কেবলমাত্র "" অ্যাসেম্বলি ফাইল সংস্করণটির মুখোমুখি হয়েছি: "এই ক্ষেত্রে একটি ওয়াইল্ডকার্ড (" * ") অনুমোদিত নয়" এটিই আপনার পদ্ধতিতে সবুজ রঙের টিকটি জিতেছে: ডি
অনুমান 16

3
এই কাজ: [সমাবেশ: AssemblyVersion ( "1.0 *।")] // [সমাবেশ: AssemblyFileVersion ( "1.0.0.0")]
সত্ত্বেও

4
একটি রিলিজ চক্রের সময় অ্যাসেম্বলি ভার্সন নম্বরটি পরিবর্তন করা বাঞ্ছনীয় নয়। পরিবর্তে, এসেম্বলিফিলিভিশনটি পরিবর্তন করা উচিত। এই বিষয়ে আমার ব্লগ পোস্টে দেখুন: philippetruche.wordpress.com/2008/08/12/... এছাড়াও যখন নম্বর পরিবর্তন করতে সুজান্ন কুকের চমৎকার পোস্টের দেখুন: blogs.msdn.com/b/suzcook/archive/2003/05/ 29 / 57148.aspx
ফিলিপ

46
আমি সতর্কতা অবলম্বন করবো * 4 জুন 2179-এ দিনটি 65536 হয়ে যাওয়ার পরে এটি কাজ করা বন্ধ করে দেবে
লয়েড পাওয়েল


53

প্রতিটি Build এ সংস্করণ সংখ্যা পরিবর্তন করার জন্য অন্য কোনো বিকল্প ব্যবহার করা সংস্করণ কাজটি MSBuild.Community.Tasks । কেবল তাদের ইনস্টলারটি ডাউনলোড করুন, এটি ইনস্টল করুন, তারপরে নিম্নলিখিত কোডটি অভিযোজিত করুন এবং এটি <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />আপনার .csprojফাইলের পরে পেস্ট করুন:

<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" />
<Target Name="BeforeBuild">
    <Version VersionFile="Properties\version.txt" Major="1" Minor="0" BuildType="Automatic" StartDate="12/31/2009" RevisionType="BuildIncrement">
      <Output TaskParameter="Major" PropertyName="Major" />
      <Output TaskParameter="Minor" PropertyName="Minor" />
      <Output TaskParameter="Build" PropertyName="Build" />
      <Output TaskParameter="Revision" PropertyName="Revision" />
    </Version>
    <AssemblyInfo CodeLanguage="CS"
                  OutputFile="Properties\VersionInfo.cs"
                  AssemblyVersion="$(Major).$(Minor)"
                  AssemblyFileVersion="$(Major).$(Minor).$(Build).$(Revision)" />
</Target>

দ্রষ্টব্য: স্টার্টডেট সম্পত্তিটি আপনার লোকেলের সাথে মানিয়ে নিন।এটি বর্তমানে আক্রমণকারী সংস্কৃতি ব্যবহার করে না।

১৪ ই জানুয়ারী, ২০১০ তৃতীয় বিল্ডের জন্য, এটি VersionInfo.csএই সামগ্রীতে একটি তৈরি করে :

[assembly: AssemblyVersion("1.0")]
[assembly: AssemblyFileVersion("1.0.14.2")]

এই ফাইলটি তখন প্রোজেক্টে যুক্ত করতে হবে ( বিদ্যমান আইটেম যুক্ত করার মাধ্যমে ), AssemblyVersionএবং AssemblyFileVersionলাইনগুলি সরিয়ে ফেলতে হবেAssemblyInfo.cs

সংস্করণ উপাদানগুলি পরিবর্তনের জন্য বিভিন্ন অ্যালগরিদমগুলি $(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.chmএবং সংস্করণ বৈশিষ্ট্যগুলিতে বর্ণিত ।


2
এটি এখনও সবচেয়ে ভাল উপায় যে আমি ফাইলভার্সন স্ট্রাইক 16 বিট পূর্ণসংখ্যার ব্যবহার করে এমন ভয়াবহ সত্যটি দেখতে পেয়েছি।
মাইকে পোস্ট পোস্ট

1
প্যাকেজ কনসোলটি ব্যবহার করে আমার ভিএস2012 এ ইনস্টল করার সমস্যা ছিল তাই github.com/loresoft/msbuildtasks/downloads এ ডাউনলোড নাইটলি এমএসআই ইনস্টলার ব্যবহার করার পরামর্শ দিন । উপরের থেকে অনুলিপি / পেস্ট কাজ করে। ধন্যবাদ!
ডেভো

এটি অস্বীকার করার পরে এবং এই পোস্টে সম্পাদনা করার পরে: "আপনি এই loresoft.com/projects/msbuildtasks/… পরীক্ষা করতেও চাইতে পারেন এটি পূর্বে বর্ণিত মৌলিক কার্যকারিতা উন্নত করতে পারে।"
রাডু ফ্লোরস্কু

1
যারা টিএফএস দিয়ে তৈরি করেন তাদের পক্ষে এটি একটি কার্যকর সমাধান নয়। চূড়ান্তভাবে, এটি VersionInfo.cs এবং version.txt ফাইলগুলিতে একটি মুলতুবি সম্পাদনা যুক্ত করবে। আমার জন্য, প্রতিটি বিল্ডের জন্য মুলতুবি সম্পাদন করা বাঞ্ছনীয় নয়।
জেডেনিস

@ জেডেনিস টিএফএস সংস্করণ টিপ্সের জন্য এখানে দেখুন ...
খ্রিস্টান

25

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

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

  <PropertyGroup>
    <Year>$([System.DateTime]::Now.ToString("yy"))</Year>
    <Month>$([System.DateTime]::Now.ToString("MM"))</Month>
    <Date>$([System.DateTime]::Now.ToString("dd"))</Date>
    <Time>$([System.DateTime]::Now.ToString("HHmm"))</Time>
    <AssemblyFileVersionAttribute>[assembly:System.Reflection.AssemblyFileVersion("$(Year).$(Month).$(Date).$(Time)")]</AssemblyFileVersionAttribute>
  </PropertyGroup>
  <Target Name="BeforeBuild">
    <WriteLinesToFile File="Properties\VersionInfo.cs" Lines="$(AssemblyFileVersionAttribute)" Overwrite="true">
    </WriteLinesToFile>
  </Target>

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


এমএসবাইল্ড কি ভেরিয়েবল সমর্থন করে? এটির মধ্যে রাখা ভাল [System.DateTime]::Now, অন্যথায়, এমন একটি রেসের শর্ত রয়েছে যা মধ্যরাতের কাছাকাছি হলে বিল্ডিং নম্বরটি ব্যবহার করতে পারে।
এডওয়ার্ড ব্রে

আপনি এই চারটি বৈশিষ্ট্যকে DateTime.ToStringপ্রদর্শনমূলক উদ্দেশ্যে এককভাবে সংযুক্ত করার পরিবর্তে সংজ্ঞায়িত করেছেন , বা এর কোনও বিশেষ কারণ আছে?
মাফু

খুঁজে বার করো আপনার BeforeBuild ঘটনা VS2017 আগুন যদি না হয় stackoverflow.com/questions/43921992/...
রাইস জোনস

এই সমাধানটি এখানে সমস্ত উত্তরগুলির মধ্যে সবচেয়ে উপযুক্ত। তবে সমস্যাটি হ'ল, দ্বিতীয়বারের মতো আপনি যদি প্রকল্পটি তৈরি করেন যা কোনও আলাদা মিনিট তৈরি করতে পারে টাইমস্ট্যাম্প (বা সংস্করণinfo.cs ফাইলের সামগ্রী) আপডেট হয় না। আমি যদি প্রকল্পটি বন্ধ করে পুনরায় লোড করি তবে টাইমস্ট্যাম্পটি আপডেট হয়ে যায়। এটি কি এমএসবিল্ডের একটি বাগ? @ বুগ
ক্যারি

16

বিল্ড সংস্করণ বৃদ্ধি অ্যাড-ইন ইনস্টল করুন। এটি আপনাকে * বিকল্পের চেয়ে আরও বেশি নিয়ন্ত্রণ দেয়।


কেবলমাত্র VS2005 / 2008 এর জন্য, ভিএস 2010 এর বিটা সহ
স্টিভিসি

r3mote203 থেকে autobuildversion.codeplex.com/discussion/393154 থ্রেডের শেষের নিকটে থাকা ড্রপবক্স লিঙ্কটি ২০১০ এর জন্য এবং ২০১২ (এবং সম্ভবত ২০১৩) এ কাজ করে।
গ্রেট

2
আমি ভিএস ২০১২ এর জন্য স্বয়ংক্রিয় সংস্করণগুলি ব্যবহার করছি এবং এটি খুব ভালভাবে কাজ করছে।
redcurry

12

সংস্করণ নম্বর পেতে চেষ্টা করুন

 System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
 System.Reflection.AssemblyName assemblyName = assembly.GetName();
 Version version = assemblyName.Version;

সংস্করণ নম্বর সেট করতে, এসেম্বলিআইএনফোস তৈরি / সম্পাদনা করুন

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

পাশাপাশি একটি নোট হিসাবে, তৃতীয় সংখ্যাটি 2/1/2000 সাল থেকে দিনের সংখ্যা এবং চতুর্থ সংখ্যাটি দিনে সেকেন্ডের পরিমাণের অর্ধেক। সুতরাং আপনি যদি মধ্যরাতে সংকলন করেন তবে এটি শূন্য হওয়া উচিত।


12

এখানে একটি ভিজ্যুয়াল স্টুডিও এক্সটেনশন স্বয়ংক্রিয় সংস্করণ রয়েছে যা ভিজ্যুয়াল স্টুডিও (2012, 2013, 2015) 2017 এবং 2019 সমর্থন করে।

স্ক্রিন শট এখানে চিত্র বর্ণনা লিখুন

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


সুতরাং আমি এটি আনইনস্টল করেছি এবং আমি আরও আরও বলতে পারি ... এটি আসল সিএসপোজ ফাইলটি সংশোধন করে। আমি মনে করি এটি খুব সমস্যাযুক্ত এক্সটেনশন।
ম্যাক্সিম

2
@ ম্যাক্সিম সর্বশেষ সংস্করণটি ব্যবহার করে দেখুন, এটি ভিএস 2017
রেডি

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

8

অন্যান্য পোস্টগুলিতে বর্ণিত হিসাবে এসেম্বলিআইএনফোতে বা প্রকল্প বৈশিষ্ট্যের আওতায় সংস্করণ নম্বরটিতে * সেট করা ভিজ্যুয়াল স্টুডিও / .NET এর সমস্ত সংস্করণে কাজ করে না।

আফাইক এটি ভিএস 2005 তে কাজ করেনি (তবে ভিএস 2003 এবং ভিএস 2008)। ভিএস 2005 এর জন্য আপনি নিম্নলিখিতগুলি ব্যবহার করতে পারেন: সংকলনের সময় অটো বর্ধন ভিজ্যুয়াল স্টুডিও 2005 সংস্করণ বিল্ড এবং সংশোধন নম্বর number

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


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

হয়তো এটি কোনও সার্ভিস প্যাক নিয়ে ফিরে এসেছিল, তবে আমি মনে করি যে আমি যখন ভিএস ২০০৫ ব্যবহার করছিলাম তখন এটি কাজ করে না
Dir

এটি 2005 এর সাথে কাজ করে না, আমি একটি সার্ভিস প্যাকটি সন্ধান করব এবং ফিরে রিপোর্ট করব।
সত্ত্বেও

হতে পারে মুসিজেনিসে একটি অ্যাড-অন ইনস্টল রয়েছে যা স্বয়ংক্রিয় সংস্করণ সক্ষম করে।
ডার্ক ভোলমার 16

@ ডিভো: না, আমি অ্যাড-অন ফোবিক। আমার সবেমাত্র ভিজ্যুয়াল স্টুডিও 2005 পেশাদার এসপি 1 রয়েছে। আমি * * এর সাথে কোনও সমস্যা কখনও দেখিনি, তবে আমি সাধারণত ম্যানুয়ালি বৃদ্ধি করি। অদ্ভুত বাগের মতো শোনাচ্ছে।
মিউজিনিসিস

6

যে কোনও নির্ভরতা ভঙ্গ না করার সুবিধা রয়েছে এমন এসেম্বলি ফাইল ভার্সন সম্পত্তিটিতে ইনক্রিমেন্টিং (ডেটটাইম) তথ্য পেতে।


বুগের সমাধানে বিল্ডিং (আমার পক্ষে কাজ হয়নি, সম্ভবত ভিএস ২০০৮ এর কারণে?), আপনি একটি ফাইল তৈরির প্রাক-বিল্ড ইভেন্টের সংমিশ্রণটি ব্যবহার করতে পারেন, সেই ফাইলটি যুক্ত করতে (এর সংস্করণ বৈশিষ্ট্য সহ) এবং তারপরে পড়ার উপায় ব্যবহার করে সেই মানগুলি আবার। এটাই..

প্রি-বিল্ড-ঘটনা:

echo [assembly:System.Reflection.AssemblyFileVersion("%date:~-4,4%.%date:~-7,2%%date:~-10,2%.%time:~0,2%%time:~3,2%.%time:~-5,2%")] > $(ProjectDir)Properties\VersionInfo.cs

ফলস্বরূপ VersionInfo.cs ফাইল (সম্পত্তি সাবফোল্ডার) আপনার প্রকল্পে অন্তর্ভুক্ত করুন

তারিখ ফিরে পেতে কোড (কয়েক বছর ধরে সেকেন্ডে):

var version = assembly.GetName().Version;
var fileVersionString = System.Diagnostics.FileVersionInfo.GetVersionInfo(assembly.Location).FileVersion;
Version fileVersion = new Version(fileVersionString);
var buildDateTime = new DateTime(fileVersion.Major, fileVersion.Minor/100, fileVersion.Minor%100, fileVersion.Build/100, fileVersion.Build%100, fileVersion.Revision);

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

আপনি উদাহরণস্বরূপ এটি আরও চৌকস করে তুলতে পারেন যদি আপনি কেবল কয়েক মিনিট / ঘন্টা পরে ভার্সনআইএনফো ফাইলগুলি আপডেট করেন (একটি অস্থায়ী ফাইল ব্যবহার করে এবং তারপরে যদি বড় পরিমাণে পরিবর্তন সনাক্ত হয় তবে আসল সংস্করণআইএনফো-কে অনুলিপি করে)। আমি একবার বেশ সফলভাবে এটি করেছি।


এটি পুরোপুরি কাজ করে। তবে, এই নিয়মিত অভিব্যক্তি% তারিখ: ~ -4,4%।% তারিখ: ~ -7,2 %% তারিখ: ~ -10,2%।% সময়: ~ 0,2 %% সময়: ~ 3,2% ।% সময়: ~ -5,2% "ঠিক খুব জটিল
ক্যারি

5

সংস্করণ নম্বরটি "1.0। *" এ সেট করুন এবং এটি স্বয়ংক্রিয়ভাবে শেষের দুটি সংখ্যাটি তারিখের সাথে পূরণ হবে (কোনও কোনও দিন থেকে কয়েক দিনের মধ্যে) এবং সময়টি (মধ্যরাত থেকে অর্ধ সেকেন্ড)


আরে আমি যদি শুরুতে এটি যথাযথভাবে পড়তে পারি তবে আমি নিজেকে অনেকটা এগ্রো বাঁচাতাম। ধন্যবাদ
সত্ত্বেও


4

পিষ্টক એસেম্বলিআইনফোর ফাইলগুলি প্যাচিং সমর্থন করে। হাতে কেক হাতে আপনার স্বয়ংক্রিয় সংস্করণ বৃদ্ধি বাড়ানোর জন্য অসীম উপায় রয়েছে।

সি # সংকলকের মতো ইনক্রিমেন্টিং সংস্করণটির সহজ উদাহরণ:

Setup(() =>
{
    // Executed BEFORE the first task.
    var datetimeNow = DateTime.Now;
    var daysPart = (datetimeNow - new DateTime(2000, 1, 1)).Days;
    var secondsPart = (long)datetimeNow.TimeOfDay.TotalSeconds/2;
    var assemblyInfo = new AssemblyInfoSettings
    {
        Version = "3.0.0.0",
        FileVersion = string.Format("3.0.{0}.{1}", daysPart, secondsPart)
    };
    CreateAssemblyInfo("MyProject/Properties/AssemblyInfo.cs", assemblyInfo);
});

এখানে:

  • সংস্করণ - সমাবেশ সংস্করণ হয়। সেরা অনুশীলনটি হ'ল প্রধান সংস্করণ নম্বরটি লক করা এবং শূন্যগুলির সাথে বাকী ছেড়ে যাওয়া ("1.0.0.0" এর মতো)।
  • ফাইল ভার্শন - হ'ল সমাবেশ ফাইল সংস্করণ।

মনে রাখবেন যে আপনি কেবল সংস্করণগুলিই নন অন্য সমস্ত প্রয়োজনীয় তথ্যও প্যাচ করতে পারেন ।


3

প্রকল্পে যান | বৈশিষ্ট্য এবং তারপরে বিধানসভা সম্পর্কিত তথ্য এবং তারপরে অ্যাসেম্বলি সংস্করণ এবং শেষ বা দ্বিতীয় থেকে শেষের বাক্সে একটি * রাখুন (আপনি মেজর বা গৌণ উপাদানগুলি স্বয়ংক্রিয়ভাবে বৃদ্ধি করতে পারবেন না)।


2

এমএসবিল্ড কমিউনিটি টাস্কগুলি ( http://msbuildtasks.tigris.org/ ) প্রকল্প থেকে এসেম্বলিআইএনফো কার্য ব্যবহার করুন এবং এটি আপনার .csproj / .vbproj ফাইলে সংহত করুন।

সংস্করণ নম্বরটি দিনের তারিখ এবং সময়ের সাথে বেঁধে একাধিক বিকল্প রয়েছে এটিতে।

প্রস্তাবিত।


2

আমার আবেদন করার জন্য এখনই,

string ver = Application.ProductVersion;

আয় ver = 1.0.3251.27860

মান 3251 1/1/2000 সাল থেকে দিনের সংখ্যা। আমি আমার অ্যাপ্লিকেশনটির স্প্ল্যাশ স্ক্রিনে একটি সংস্করণ তৈরির তারিখ রাখতে এটি ব্যবহার করি। কোনও ব্যবহারকারীর সাথে কথা বলার সময়, আমি তৈরির তারিখটি জানতে পারি যা কোনও দীর্ঘ সংখ্যার চেয়ে যোগাযোগ করা সহজ easier

(আমি একটি ছোট কোম্পানিকে সমর্থনকারী একজন লোকের ডিপ্ট। এই পদ্ধতিটি আপনার পক্ষে কার্যকর নাও হতে পারে))


আপনার নম্বর দ্রুত শেষ হতে চলেছে। আমি ইয়াডিডিডি ব্যবহার করব যা 2 ডিজিটাল বছর এবং বছরের প্রথম থেকে 3 ডিজিটের দিন যা সর্বোচ্চ 365। আপনার প্রোগ্রাম দেওয়া এখনও তারিখে কমিশনে!
এএএ

2

এসেম্বলআইনফো পরিবর্তন করা ভিএস ২০১২-এ কাজ করে। এটি আশ্চর্যজনক বলে মনে হয় যে ভিজ্যুয়াল স্টুডিওতে এর পক্ষে আরও সমর্থন নেই, আপনি মনে করেন এটি বিল্ড / রিলিজ প্রক্রিয়ার একটি প্রাথমিক অংশ ছিল।


2

সংস্করণটি কীভাবে পাবেন {major}.{year}.1{date}.1{time}

এটি একরকম পরীক্ষামূলক, তবে আমি এটি পছন্দ করি। জেফ অ্যাটউড @ কোডিংহরর দ্বারা অনুপ্রাণিত ( লিঙ্ক) )।

ফলস্বরূপ সংস্করণ নম্বরটি হয়ে যায় 1.2016.10709.11641(যার অর্থ 2016-07-09 16:41), যা এর জন্য অনুমতি দেয়

  • দরিদ্র মানস শূন্য প্যাডিং (বোকা নেতৃস্থানীয় সহ) 1 গুলি সহ)
  • প্রায় মানুষ পাঠযোগ্য স্থানীয় তারিখটাইম সংস্করণ নম্বরটিতে এম্বেড হয়েছে
  • সত্যিই বড় ব্রেকিং পরিবর্তনের জন্য মেজর সংস্করণটি একা রেখে দেওয়া।

আপনার প্রকল্পে একটি নতুন আইটেম যুক্ত করুন, সাধারণ -> পাঠ্য টেম্পলেট নির্বাচন করুন, এর মতো কিছু নাম দিন CustomVersionNumberএবং (যেখানে প্রযোজ্য) মন্তব্যটি AssemblyVersionএবং এর AssemblyFileVersionমধ্যে মন্তব্য করুনProperties/AssemblyInfo.cs

তারপরে, এই ফাইলটি সংরক্ষণ করার সময়, বা প্রকল্পটি তৈরি করার সময়, .csএটি তৈরি করা .ttফাইলের অধীনে একটি সাব-আইটেম হিসাবে অবস্থিত একটি ফাইলটিকে পুনরায় জেনারেট করবে ।

<#@ template language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>

//
// This code was generated by a tool. Any changes made manually will be lost
// the next time this code is regenerated.
//

using System.Reflection;

<#
    var date = DateTime.Now;
    int major = 1;
    int minor = date.Year;
    int build = 10000 + int.Parse(date.ToString("MMdd"));
    int revision = 10000 + int.Parse(date.ToString("HHmm"));
#>

[assembly: AssemblyVersion("<#= $"{major}.{minor}.{build}.{revision}" #>")]
[assembly: AssemblyFileVersion("<#= $"{major}.{minor}.{build}.{revision}" #>")]

আপনি প্রতি মিনিটে আপনার প্রোগ্রামটি সংকলন করছেন না বা দিনে একাধিক মোতায়েন করছেন না, তাই প্রযুক্তিগতভাবে সময় অংশটি অযথা মূল্যবান তথ্য দখল করে চলেছে, আমি বড় নাবালকের জন্য ১ ম এবং দ্বিতীয় ব্যবহার করব এবং কেবল তৃতীয় নম্বর ইয়াইডডিডি ব্যবহার করব (দুই অঙ্কের বছর + একই বছরের শুরু থেকে ddd দিন) এবং ইনক্রিমেন্টাল বিল্ড নম্বরের জন্য 4 র্থ ত্যাগ করুন।
এএএ

2

আমি স্বয়ংক্রিয়ভাবে ফাইল সংস্করণ বাড়ানোর জন্য একটি অ্যাপ্লিকেশন তৈরি করেছি।

  1. অ্যাপ্লিকেশন ডাউনলোড করুন
  2. প্রাক-বিল্ড ইভেন্ট কমান্ড লাইনে নিম্নলিখিত লাইনটি যুক্ত করুন

    সি: \ টেম্পে

  3. প্রকল্প তৈরি করুন

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

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

পরামর্শ এবং অনুরোধের জন্য দয়া করে আমাকে telson_alva@yahoo.com এ ইমেল করুন


2

ভিজ্যুয়াল স্টুডিও 2019 এ

এটি যোগ করার জন্য আমার পক্ষে যথেষ্ট ছিল না

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

এটি নির্মাণের সময় আমাকে এই ত্রুটি ছুড়ে দেয়

নির্দিষ্ট সংস্করণ স্ট্রিং প্রয়োজনীয় বিন্যাসের সাথে সামঞ্জস্য করে না

সমাধান

আমি সেট আপ Deterministicকরার পরে অবশেষে ফর্ম্যাটটি গৃহীত Falseহয়েছিলproject.csproj

<Deterministic>false</Deterministic>

সম্পাদনা:

কিছু কারণে সেটিং এর জন্য DeterministicকরতেFalse আমার কনফিগারেশন ফাইলটি এতে লোড হচ্ছে এবং এটিকে বিভিন্ন স্থানে সংরক্ষণ করে গণ্ডগোল ।

কার্যসংক্রান্ত:

আমি পুনর্বিবেচনার সংখ্যা বাড়ানোর জন্য একটি বিল্ড-পরবর্তী ইভেন্ট সেটআপ করেছি:

পোস্ট-বিল্ড ইভেন্ট ব্যাচের স্ক্রিপ্ট

এটি autoincrement_version.ps1আর্গুমেন্টের পথ হিসাবে পাস করার নামে একটি পাওয়ারশেল লিপি কল করেAssemblyInfo.cs

if $(ConfigurationName) == Release (
PowerShell -ExecutionPolicy RemoteSigned $(ProjectDir)autoincrement_version.ps1 '$(ProjectDir)My Project\AssemblyInfo.cs'
)

পাওয়ারশেল লিপি

এটি রেজেকস ব্যবহার করে পুনর্বিবেচনা নম্বরটি স্ব-স্ব-সংযোজন করে

param( [string]$file );
  $regex_revision = '(?<=Version\("(?:\d+\.)+)(\d+)(?="\))'
  $found = (Get-Content $file) | Select-String -Pattern $regex_revision
  $revision = $found.matches[0].value
  $new_revision = [int]$revision + 1
  (Get-Content $file) -replace $regex_revision, $new_revision | Set-Content $file -Encoding UTF8

1

হতে পারে, এই কাজের জন্য, আপনি এই জাতীয় কোড ব্যবহার করতে পারেন:

    private bool IncreaseFileVersionBuild()
    {
        if (System.Diagnostics.Debugger.IsAttached)
        {
            try
            {
                var fi = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory).Parent.Parent.GetDirectories("Properties")[0].GetFiles("AssemblyInfo.cs")[0];
                var ve = System.Diagnostics.FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly().Location);
                string ol = ve.FileMajorPart.ToString() + "." + ve.FileMinorPart.ToString() + "." + ve.FileBuildPart.ToString() + "." + ve.FilePrivatePart.ToString();
                string ne = ve.FileMajorPart.ToString() + "." + ve.FileMinorPart.ToString() + "." + (ve.FileBuildPart + 1).ToString() + "." + ve.FilePrivatePart.ToString();
                System.IO.File.WriteAllText(fi.FullName, System.IO.File.ReadAllText(fi.FullName).Replace("[assembly: AssemblyFileVersion(\"" + ol + "\")]", "[assembly: AssemblyFileVersion(\"" + ne + "\")]"));
                return true;
            }
            catch
            {
                return false;
            }
        }
        return false;
    }

এবং ফর্ম লোডিং থেকে কল।
এই কোডের সাহায্যে আপনি ফাইল সম্পর্কিত তথ্যের যে কোনও অংশটি এসেম্বলিআইএনফো সিএসে আপডেট করতে পারেন (তবে আপনাকে অবশ্যই "স্ট্যান্ডার্ড" ডিরেক্টরি কাঠামো ব্যবহার করতে হবে)।



1

আমি এই পদ্ধতির https://stackoverflow.com/a/827209/3975786 টি 4 টেমপ্লেটটিকে "সমাধান আইটেমগুলিতে" রেখে এবং প্রতিটি প্রকল্পের মধ্যে "লিঙ্ক হিসাবে যুক্ত করুন" ব্যবহার করে এটি ব্যবহার করছি।


1

এখানে উত্তর দিতে খুব দেরী হয়েছে তবে আশা করি কারও সমস্যা সমাধান করবে will

পাওয়ারশেল স্ক্রিপ্ট ব্যবহার করে আপনার সমস্ত প্রকল্পের সমাবেশ সংস্করণ পরিবর্তন করার একটি স্বয়ংক্রিয় উপায়। এই নিবন্ধটি আপনার অনেক সমস্যার সমাধান করবে।


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

0

প্রতিবার যখন আমি কোনও বিল্ড করি এটি সর্বনিম্ন-তাত্পর্যপূর্ণ অঙ্কটি স্বয়ংক্রিয়ভাবে বৃদ্ধি করে।

অন্যদের কীভাবে আপডেট করবেন সে সম্পর্কে আমার কোনও ধারণা নেই তবে আপনার কমপক্ষে এটি ইতিমধ্যে দেখা উচিত ...


1
ভিএস শেষ সংখ্যাটি বাড়ানোর দায়িত্বে থাকে যা সাধারণত বিল্ড নম্বর। অন্য সমস্ত কিছু (যেমন তার আগে সংখ্যাগুলি) আপনার উপর নির্ভর করে কারণ তারা আপনার আবেদনের সংস্করণটি উপস্থাপন করে।
5

1
Шобајић Шобајић: একদম ঠিক নেই। মাইক্রোসফ্টের নম্বরকরণের প্রকল্পটি মেজর.মিনি.র বিল্ড.রিভিশন, উদাহরণস্বরূপ 1.0.4.7। যদি আপনি "1.0। *" এর মতো কোনও অ্যাসেমবিলি সংস্করণ সেট করেন তবে ভিএস আপনার জন্য বিল্ড এবং রিভিশন নম্বর সেট করবে। সেক্ষেত্রে বিল্ড দৈনিক বৃদ্ধি পাবে, এবং পুনর্বিবেচনাটি মধ্যরাত থেকে সেকেন্ডের সংখ্যা হবে ২ দ্বারা বিভক্ত
সাইমন তেউসি

0

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

যদি আপনার টেম্পলেটটিকে এসেম্বলিআইএনফো.উগ্রিভ বলা হয় এবং সাধারণ এসেম্বলিআইএনফো-সি ডিরেক্টরিতে বসে এবং কচ্ছপটি ডিফল্ট ইনস্টলেশন ডিরেক্টরিতে থাকে, তবে আপনার প্রাক-বিল্ড কমান্ডটি এটির মতো দেখাচ্ছে (এনবি সমস্ত এক লাইনে):

"C:\Program Files\TortoiseSVN\bin\SubWCRev.exe" "$(ProjectDir)." "$(ProjectDir)Properties\AssemblyInfo.wcrev"  "$(ProjectDir)Properties\AssemblyInfo.cs"

টেমপ্লেট ফাইলটিতে wcrev টোকেন প্রতিস্থাপনের স্ট্রিং অন্তর্ভুক্ত থাকবে: $ WCREV $
যেমন

[assembly: AssemblyFileVersion("1.0.0.$WCREV$")]

দ্রষ্টব্য:
আপনার এসেম্বলিআইএনফোস তৈরি হওয়ার সাথে সাথে আপনি এটির সংস্করণটি নিয়ন্ত্রিত করতে চান না।

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