AssemblyInfo.cs の例

# グローバルおよびローカル AssemblyInfo

グローバルを使用すると、DRY 性が向上します。差異のあるプロジェクトの AssemblyInfo.cs に異なる値を入力するだけで済みます。この使用は、製品に複数のビジュアル スタジオ プロジェクトがあることを前提としています。

GlobalAssemblyInfo.cs

using System.Reflection;
using System.Runtime.InteropServices;
//using Stackoverflow domain as a made up example    

// It is common, and mostly good, to use one GlobalAssemblyInfo.cs that is added 
// as a link to many projects of the same product, details below
// Change these attribute values in local assembly info to modify the information.
[assembly: AssemblyProduct("Stackoverflow Q&A")]
[assembly: AssemblyCompany("Stackoverflow")]
[assembly: AssemblyCopyright("Copyright © Stackoverflow 2016")]

// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("4e4f2d33-aaab-48ea-a63d-1f0a8e3c935f")]
[assembly: ComVisible(false)] //not going to expose ;)

// Version information for an assembly consists of the following four values:
// roughly translated from I reckon it is for SO, note that they most likely 
// dynamically generate this file
//      Major Version  - Year 6 being 2016
//      Minor Version  - The month
//      Day Number     - Day of month
//      Revision       - Build number
// You can specify all the values or you can default the Build and Revision Numbers 
// by using the '*' as shown below: [assembly: AssemblyVersion("year.month.day.*")]
[assembly: AssemblyVersion("2016.7.00.00")] 
[assembly: AssemblyFileVersion("2016.7.27.3839")]

AssemblyInfo.cs - 各プロジェクトに 1 つ

//then the following might be put into a separate Assembly file per project, e.g.
[assembly: AssemblyTitle("Stackoveflow.Redis")]

次の手順を使用して、GlobalAssemblyInfo.cs をローカル プロジェクトに追加できます。

<オール>
  • プロジェクトのコンテキスト メニューで [Add/Existing Item...] を選択します
  • GlobalAssemblyInfo.cs を選択
  • 右側の小さな下向き矢印をクリックして、追加ボタンを展開します
  • ボタンのドロップダウン リストで [リンクとして追加] を選択します
  • # [アセンブリ バージョン]

    この属性は、バージョンをアセンブリに適用します。

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

    * 文字は、コンパイルするたびにバージョンの一部を自動的にインクリメントするために使用されます (「ビルド」番号によく使用されます)

    # [AssemblyTitle]

    この属性は、この特定のアセンブリに名前を付けるために使用されます。

    [assembly: AssemblyTitle("MyProduct")]
    
    

    # [アセンブリ製品]

    この属性は、この特定のアセンブリが対象とする製品を説明するために使用されます。複数のアセンブリを同じ製品のコンポーネントにすることができます。その場合、それらはすべてこの属性に対して同じ値を共有できます。

    [assembly: AssemblyProduct("MyProduct")]
    
    

    # 自動バージョニング

    ソース管理のコードには、デフォルト (SVN ID または Git SHA1 ハッシュ) または明示的 (Git タグ) のバージョン番号があります。 AssemblyInfo.cs のバージョンを手動で更新するのではなく、ビルド時のプロセスを使用して、ソース管理システムから AssemblyInfo.cs ファイルに、つまりアセンブリにバージョンを書き込むことができます。

    GitVersionTask または SemVer.Git.Fody NuGet パッケージは上記の例です。たとえば、GitVersionTask を使用するには、プロジェクトにパッケージをインストールした後、Assembly*Version を削除します。 AssemblyInfo.cs ファイルの属性。これにより、GitVersionTask がアセンブリのバージョン管理を担当します。

    セマンティック バージョニングがデファクトになりつつあることに注意してください 標準であるため、これらの方法では、SemVer に従うソース管理タグを使用することをお勧めします。

    # 共通フィールド

    AssemblyInfo の既定のフィールドを完成させることをお勧めします。この情報はインストーラーによって取得される場合があり、プログラムと機能 (Windows 10) を使用してプログラムをアンインストールまたは変更するときに表示されます。

    最小値は次のとおりです:

    • AssemblyTitle - 通常は名前空間、つまり MyCompany.MySolution.MyProject
    • AssemblyCompany - 法人のフルネーム
    • AssemblyProduct - マーケティング担当者はここに表示される場合があります
    • AssemblyCopyright - 見栄えが悪いので最新の状態に保つ

    DLL の [プロパティの詳細] タブを調べると、「AssemblyTitle」が「ファイルの説明」になります。

    # [InternalsVisibleTo]

    internalにしたい場合 InternalsVisibleTo でこれを宣言する別のアセンブリからアクセス可能なアセンブリのクラスまたは関数 およびアクセスが許可されているアセンブリ名。

    アセンブリ MyAssembly.UnitTests のこのコード例では internal の呼び出しが許可されています MyAssembly の要素 .

    [assembly: InternalsVisibleTo("MyAssembly.UnitTests")]
    
    

    これは、不要な public を防ぐための単体テストに特に役立ちます。

    # アセンブリ属性の読み取り

    .NET の豊富なリフレクション API を使用して、アセンブリのメタデータにアクセスできます。たとえば、this を取得できます 次のコードを含むアセンブリのタイトル属性

    using System.Linq;
    using System.Reflection;
    
    ...
    
    Assembly assembly = typeof(this).Assembly;
    var titleAttribute = assembly.GetCustomAttributes<AssemblyTitleAttribute>().FirstOrDefault();
    
    Console.WriteLine($"This assembly title is {titleAttribute?.Title}");
    
    

    # [アセンブリ構成]

    AssemblyConfiguration:AssemblyConfiguration 属性には、アセンブリのビルドに使用された構成が必要です。条件付きコンパイルを使用して、さまざまなアセンブリ構成を適切に含めます。次の例のようなブロックを使用します。通常使用するさまざまな構成をできるだけ多く追加してください。

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

    # [AssemblyKeyFile]

    アセンブリを GAC にインストールする場合は常に、厳密な名前が必要です。厳密な命名アセンブリのために、公開鍵を作成する必要があります。.snk を生成するには ファイル。

    厳密な名前のキー ファイルを作成するには

      - VS2015 の開発者コマンド プロンプト (管理者アクセスあり)- コマンド プロンプトで、cd C:\Directory_Name と入力し、Enter キーを押します。- コマンド プロンプトで、sn -k KeyFileName.snk と入力し、Enter キーを押します。

    keyFileName.snk が指定されたディレクトリに作成されたら、プロジェクトで参照を与えます。 AssemblyKeyFileAttribute を与える パスを snk に属性付けます クラス ライブラリをビルドするときにキーを生成するためのファイルです。

    プロパティ -> AssemblyInfo.cs

    [assembly: AssemblyKeyFile(@"c:\Directory_Name\KeyFileName.snk")]
    
    

    これにより、ビルド後に厳密な名前のアセンブリが作成されます。厳密な名前のアセンブリを作成したら、それを GAC にインストールできます

    ハッピーコーディング 😃

    # コメント

    ファイル名 AssemblyInfo.cs は、開発者が構築するアセンブリ全体を記述するメタデータ属性を配置するソース ファイルとして慣習的に使用されます。


    No