সমাবেশ বৈশিষ্ট্য ব্যবহারের জন্য সেরা অনুশীলনগুলি কী কী?


163

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


সম্পাদনা: আপনি যদি আগ্রহী হন তবে ফলোআপ প্রশ্ন রয়েছে এসেম্বলি ভার্সন, এসেম্বলিফিলিভিশন এবং এসেম্বলিআইফর্মেশনাল ভার্সনের মধ্যে পার্থক্যগুলি কী?

উত্তর:


207

আমরা একটি গ্লোবাল ফাইল যা গ্লোবালএস্প্যাশনআইএনফোস সিএস নামে পরিচিত এবং একটি স্থানীয় ফাইল যা এসেম্বলিআইএনফো। গ্লোবাল ফাইলটিতে নিম্নলিখিত বৈশিষ্ট্যগুলি রয়েছে:

 [assembly: AssemblyProduct("Your Product Name")]

 [assembly: AssemblyCompany("Your Company")]
 [assembly: AssemblyCopyright("Copyright © 2008 ...")]
 [assembly: AssemblyTrademark("Your Trademark - if applicable")]

 #if DEBUG
 [assembly: AssemblyConfiguration("Debug")]
 #else
 [assembly: AssemblyConfiguration("Release")]
 #endif

 [assembly: AssemblyVersion("This is set by build process")]
 [assembly: AssemblyFileVersion("This is set by build process")]

স্থানীয় એસেম্বলিআইএনফো-সি-তে নিম্নলিখিত বৈশিষ্ট্যগুলি রয়েছে:

 [assembly: AssemblyTitle("Your assembly title")]
 [assembly: AssemblyDescription("Your assembly description")]
 [assembly: AssemblyCulture("The culture - if not neutral")]

 [assembly: ComVisible(true/false)]

 // unique id per assembly
 [assembly: Guid("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")]

আপনি নিম্নলিখিত পদ্ধতিটি ব্যবহার করে গ্লোবালঅ্যাস্পেসনআইএনফো সি.এস. যুক্ত করতে পারেন:

  • প্রকল্পের প্রসঙ্গ মেনুতে ... যোগ করুন / বিদ্যমান আইটেম নির্বাচন করুন
  • গ্লোবালঅ্যাস্পেইশনআইএনফো সি সি নির্বাচন করুন
  • ডান হাতের সেই ছোট্ট ডাউন-তীরটিতে ক্লিক করে অ্যাড-বোতামটি প্রসারিত করুন
  • বোতামগুলির ড্রপ ডাউন তালিকায় "অ্যাড লিঙ্ক অ্যাড" নির্বাচন করুন

পুরানো এসেম্বলিআইএনফো ফাইলগুলি (গুলি) রাখার উদ্দেশ্য কী? যখন আমি গ্লোবালঅ্যাস্পেসিয়ালইনফোর.কমগুলিতে আমার বিল্ড সংস্করণ স্ট্যাম্পটি স্বয়ংক্রিয় করব, তখন আমার সমাধানে আমি কীভাবে এসেম্বলিআইএনফো ফাইলগুলি (গুলি) আপডেট করি?
D3vtr0n

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

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

20

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

[assembly: AssemblyCompany("Company")]
[assembly: AssemblyProduct("Product Name")]
[assembly: AssemblyCopyright("Copyright © 2007 Company")]
[assembly: AssemblyTrademark("Company")]

//This shows up as Product Version in Windows Explorer
//We make this the same for all files in a particular product version. And increment it globally for all projects.
//We then use this as the Product Version in installers as well (for example built using Wix).
[assembly: AssemblyInformationalVersion("0.9.2.0")]

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

আশা করি এইটি কাজ করবে.


এটি হ্যান্ডল করার জন্য আপনার বিল্ড কনফিগারেশনে 35+ এন্ট্রি রয়েছে? বরং অপ্রয়োজনীয় মনে হচ্ছে। আপনি যদি 2 বা 3 টি নতুন প্রকল্প যুক্ত করেন তবে আপনি ভার্শনিংয়ের কাজে যুক্ত না হওয়া পর্যন্ত এটি কী আপনার বিল্ডটি ভাঙবে?
D3vtr0n

1
@ ডি 3vtr0n, কেন একটি "বিল্ড কনফিগারেশন" (এর অর্থ আপনি কী বোঝাতে চান) এত বেশি এন্ট্রি লাগবে? আমি ধরে নিই যে এই ফাইলটি প্রতিটি .csproj এর মাধ্যমে অন্তর্ভুক্ত রয়েছে <Compile Include="$(MSBuildThisFileDirectory)..\Common\CommonAssemblyInfo.cs"/>, একটি এমএসবিল্ড নির্দেশিকা যা একটি ভাগ করা Common.targetsফাইলের মধ্যেও থাকতে পারে । ইয়ে কোড পুনরায় ব্যবহার করুন।
বিনকি

15

@ জে রর্পার্টের উপস্থাপিত সমাধানটি আমি যা করি তা প্রায় একই রকম। পার্থক্যটি হ'ল আমি প্রতিটি সমাবেশের সাথে পৃথক হতে পারে বলে স্থানীয় এসেম্বলিআইএনফো ফাইলগুলিতে নিম্নলিখিত লাইনগুলি রেখেছি:

#if DEBUG
[assembly: AssemblyConfiguration("Debug")]
#else
[assembly: AssemblyConfiguration("Release")]
#endif
[assembly: AssemblyVersion("This is set by build process")]
[assembly: AssemblyFileVersion("This is set by build process")]
[assembly: CLSCompliant(true)]

আমি (সাধারণভাবে) সমাধান হিসাবে একটি সাধারণ সমাবেশ তথ্য ব্যবহার করি, এই ধারনা সহ যে একটি দ্রষ্টব্য একক পণ্য লাইন / পুনঃনির্মাণযোগ্য পণ্য। সাধারণ সমাবেশ তথ্য ফাইলটিতেও রয়েছে:

[assembly: AssemblyInformationalVersion("0.9.2.0")]

যা উইন্ডোজ এক্সপ্লোরার দ্বারা প্রদর্শিত "প্রোডাক্ট ভার্সন" মান সেট করবে।


8

এমএস বিল্ড কমিউনিটি টাস্কগুলিতে এসেম্বলিআইএনফো নামে একটি কাস্টম টাস্ক রয়েছে যা আপনি আপনার এসেম্বলিনফো কোডগুলি তৈরি করতে ব্যবহার করতে পারেন। এটি ব্যবহারের জন্য আপনার সিএসপোজ ফাইলগুলির একটি সামান্য হস্ত-সম্পাদনা প্রয়োজন তবে এটি সার্থক।


6

আমার মতে গ্লোবালএস্প্যাশিয়ালআইনফো.সি.এস ব্যবহার করা তার মূল্যবোধের থেকে বেশি সমস্যা, কারণ আপনাকে প্রতিটি প্রকল্পের ফাইলটি সংশোধন করতে হবে এবং প্রতিটি নতুন প্রকল্প সংশোধন করার কথা মনে রাখতে হবে, যেখানে আপনি ডিফল্টরূপে অ্যাসেম্বলআইএনফো-সি পান।

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

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="UpdateAssemblyInfo" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <ItemGroup>
        <AllAssemblyInfoFiles Include="..\**\AssemblyInfo.cs" />
    </ItemGroup>

    <Import Project="MSBuild.ExtensionPack.tasks" />

  <Target Name="UpdateAssemblyInfo">
    <Message Text="%(AllAssemblyInfoFiles.FullPath)" />
    <MSBuild.ExtensionPack.Framework.AssemblyInfo 
        AssemblyInfoFiles="@(AllAssemblyInfoFiles)"
        AssemblyCompany="Company"
        AssemblyProduct="Product"
        AssemblyCopyright="Copyright"
        ... etc ...
        />
  </Target>

</Project>

3

একাধিক প্রকল্পের মধ্যে একটি ফাইল ভাগ করতে আপনি একটি বিদ্যমান লিঙ্কটিকে লিঙ্ক হিসাবে যুক্ত করতে পারেন।

এটি করতে, একটি বিদ্যমান ফাইল যুক্ত করুন এবং ফাইল সিলেক্টারে "লিঙ্ক হিসাবে যুক্ত করুন" এ ক্লিক করুন। (উত্স: free.fr )লিঙ্ক হিসাবে যুক্ত করুন

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


1

একাধিক প্রকল্পের জন্য একটি একা এসেম্বলিআইএনফো ফাইল ব্যবহার করার পরামর্শ দেওয়া হয় না। এসেম্বলিআইএনফো ফাইলটিতে এমন তথ্য অন্তর্ভুক্ত রয়েছে যা কেবলমাত্র নির্দিষ্ট নির্দিষ্ট সমাবেশের জন্যই প্রাসঙ্গিক হতে পারে। দুটি অত্যন্ত সুস্পষ্ট তথ্য হ'ল AssemblyTitleএবং AssemblyVersion

targetsএকাধিক প্রকল্পের অ্যাসেম্বলি অ্যাট্রিবিউটগুলি "ইনজেক্ট" করার জন্য, এমএসবাইল্ড দ্বারা পরিচালিত ফাইলগুলি ব্যবহার করা আরও ভাল সমাধান হতে পারে ।


যদি আপনার 20+ প্রজেক্ট থাকে? এর জন্য আমার বিল্ড কনফিগারেশনে 20+ এন্ট্রি বজায় রাখা প্রয়োজন, কেবলমাত্র সংস্করণের জন্য। এটা সত্যিই খোঁড়া বলে মনে হচ্ছে। আমি যদি 2 বা 3 টি নতুন প্রকল্প যুক্ত করি? এটি অবশ্যই বিল্ড প্রক্রিয়াটি ভেঙে দেবে ... কোনও সমাধান কীভাবে সমাধান করা যায়?
D3vtr0n

@ ডি 3vtr0n আমার ধারণা ধারণাটি প্রাসঙ্গিকভাবে অ্যাসেম্বলিটি গতিশীলভাবে তৈরি করা এবং প্রতিটি প্রকল্পের জন্য স্বতন্ত্র কনফিগারেশন বজায় না রাখা। সম্প্রদায়ের কাজগুলি, আমি মনে করি, কেসটি পরিচালনা করে।
রোমান

1

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

আমি টরটোইসভিএন ব্যবহার করি এবং এটি SubWCRev.exeকোনও টেমপ্লেটকে AssemblyInfo.wcrevরূপান্তরিত করা সহজ AssemblyInfo.cs। টেমপ্লেটের প্রাসঙ্গিক লাইনটি দেখতে এরকম কিছু দেখতে পারে:

[assembly: AssemblyVersion("2.3.$WCREV$.$WCMODS?1:0$$WCUNVER?1:0$")]

তৃতীয় উপাদানটি হ'ল সংশোধন নম্বর number আমি কোনও নতুন বা পরিবর্তিত ফাইলের প্রতিশ্রুতি দিতে ভুলিনি তা পরীক্ষা করার জন্য আমি চতুর্থ উপাদানটি ব্যবহার করি (চতুর্থ উপাদানটি যদি ঠিক থাকে তবে 00 হয়)।

যাইহোক, AssemblyInfo.wcrevআপনার সংস্করণ নিয়ন্ত্রণে যুক্ত করুন এবং আপনি যদি এটি ব্যবহার করেন তবে তা উপেক্ষা করুন AssemblyInfo.cs

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