[C#] 剖析 AssemblyInfo.cs - 了解常用的特性 Attribute

2019-12-17 作者:www.js36663.com   |   浏览(55)

浅析 AssemblyInfo.cs - 明白常用的特色 Attribute

【博主】反骨仔    【原文】

 

图片 1

  

  此前,大家因而《C#[C#] 剖析 AssemblyInfo.cs - 了解常用的特性 Attribute。 知识回想 - 脾气Attribute》已经领悟什么成立和行使特性Attribute,此番,让大家一块来看看每一趟使用 VS 创造项目时所自带的文书 AssemblyInfo.cs。

 

目录

  • 大局特性
  • 已不适那时候宜的特点:Obsolete
  • [C#] 剖析 AssemblyInfo.cs - 了解常用的特性 Attribute。原则特性:Conditional
  • 调用方音讯个性

 

AssemblyInfo.cs

图片 2

专擅行选购取二个 AssemblyInfo.cs 文件,张开图中的代码,看箭头↓

using System.Reflection;
using System.Runtime.InteropServices;

// 有关程序集的常规信息通过下列特性集
// 控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("MusicStore")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Microsoft")]
[assembly: AssemblyProduct("MusicStore")]
[assembly: AssemblyCopyright("Copyright © Microsoft 2016")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

// 将 ComVisible 设置为 false 会使此程序集中的类型
// 对 COM 组件不可见。如果需要
// 从 COM 访问此程序集中的某个类型,请针对该类型将 ComVisible 特性设置为 true。
[assembly: ComVisible(false)]

// 如果此项目向 COM 公开,则下列 GUID 用于 typelib 的 ID
[assembly: Guid("a9ef3281-9049-4a52-a2f1-2061d442200e")]

// 程序集的版本信息由下列四个值组成:
//
//      主版本
//      次版本
//      内部版本号
//      修订版本
//
// 可以指定所有值,也可以使用“修订号”和“内部版本号”的默认值,
// 方法是按如下所示使用 "*":
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

 

大器晚成、全局天性

  大比相当多特点适用于特定的言语元素(如类或艺术),可是,有种天性它们适用于漫天程序集或模块,称为全局本性。如:AssemblyVersionAttribute 天性可用于向程序集中停放版本音信。

图片 3

 

  全局天性在源代码中出现在别的超级 using 指令以至任何项目、模块或命名空间注明以前。全局天性可展现在多个源文件,然而,在单一编写翻译传递必得编写翻译文件。在 C# 项目中,它们在 AssemblyInfo.cs 文件中。

  程序集个性是提供有关程序集的消息的值。它们分成以下项目:

    ①顺序集标识脾气

    ②音信性天性

[C#] 剖析 AssemblyInfo.cs - 了解常用的特性 Attribute。[C#] 剖析 AssemblyInfo.cs - 了解常用的特性 Attribute。    ③程序集项目清单天性

    ④强名称天性

  

  1.程序集标志天性

  多个特点 (使用强名称,若是适用)鲜明程序集的标记:名称、版本和区域性。当在代码中援用时,这个特点构成程序集的欧洲经济共同体名称必要。使用本性,能够将顺序集的本子、区域性和名称值,由编写翻译器,在 “程序集音信”对话框 的 Visual Studio IDE 设置,在创设程序集后,依照包涵程序集清单的文件。AssemblyFlagsAttribute[C#] 剖析 AssemblyInfo.cs - 了解常用的特性 Attribute。 本性钦定程序集的四个别本是还是不是可以共存。

图片 4

 

图片 5

图 - “程序集音讯”对话框

图片 6

图 - “程序集音信”对话框中的名词和 AssemblyInfo.cs 文件的附和关系

 

  2.新闻性本性

  您能够运用消息性性情为顺序集提供任何的公司或付加物音讯。

图片 7

 

  3.主次集项目清单特性

  能够使用程序集清单性子提供程序集清单中的音信。此中囊括题目、表明、私下认可小名和安插。

图片 8

 

  4.强称谓特性(不浓厚)

  平时设有 Visual Studio 的前期版本,若要使用强名称的次第集实践以下顺序集等第天性:

    ①AssemblyKeyFileAttribute

    ②AssemblyKeyNameAttribute

    ③AssemblyDelaySignAttribute

  尽管以后仍辅助,不过,给程序集签字的首选办法是运用“具名页”。(这里不浓郁摸底)

 

二、已不适那时候候宜的风味:Obsolete

   Obsolete 特性提示有些程序实体标识为提议不再采纳的叁个。 每便使用对实体标识为过时依据随后将生成警报或错误。

 1     /// <summary>
 2     /// 旧类
 3     /// </summary>
 4     [Obsolete("请使用 " + nameof(NewClass))]
 5     class OldClass
 6     {
 7         public void Method() { }
 8     }
 9 
10     /// <summary>
11     /// 新类
12     /// </summary>
13     class NewClass
14     {
15         [Obsolete("请使用 " + nameof(NewMethod), true)]
16         public void OldMethod() { }
17 
18         public void NewMethod() { }
19     }

 1     class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             var oldClass = new OldClass();  //警告
 6 
 7             var newClass = new NewClass();
 8             newClass.OldMethod();  //报错
 9         }
10     }

图片 9

  在这里示例中应用 Obsolete 特性类 OldClass 和方法 NewClass.OldMethod。此构造函数的率先个参数为警报或不当的音信,由于天性布局函数的第叁个参数被应用于 NewClass.OldMethod 设置为 true,此办法将导致编写翻译器错误,而接纳 OldClass 只将生成警示的类。

 

三、条件性情:Conditional

Conditional 天性执行格局信任于预管理标志符。Conditional 属性是 ConditionalAttribute 的小名,可使用于艺术或属性类。

  在那示例中,Conditional 应用于方法以启用或剥夺程序一定诊失去消息息示:

 1     class Debug
 2     {
 3         [Conditional("DEBUG")]
 4         public static void Output(string msg)
 5         {
 6             Console.WriteLine(msg);
 7         }
 8     }
 9 
10     class Program
11     {
12         static void Main(string[] args)
13         {
14             Debug.Output("This is Debug!");
15             Console.WriteLine("Done!");
16 
17             Console.Read();
18         }
19     }

  Conditional 性子平常用于在 DEBUG 标记符启用跟踪,并记录的职能的调和版本,但不在发表版本中。

图片 10

  

  将事情发生此前的代码简单改造下,使用 #if…#endif 包扎,结果和上海体育场合是相符的。

    class Debug
    {
        public static void Output(string msg)
        {
            Console.WriteLine(msg);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            #if DEBUG
            Debug.Output("This is Debug!");
            #endif

            Console.WriteLine("Done!");

            Console.Read();
        }
    }

  使用 Conditional 越发卫生,当然也能够将日常不太到用到恐怕轻易失误的诀窍在 #if…#endif 内部块标记。

图片 11

 

四、调用方新闻天性

  使用调用方音讯属性,能够收获有关调用方的新闻传递给艺术。能够获得源代码、行号在源代码和调用方的积极分子名称的公文路径。

  若要获取成员调用方音信,请使用适用于可选参数的性格。种种可选参数钦命私下认可值。

图片 12

 

 1     internal class Program
 2     {
 3         private static void Main(string[] args)
 4         {
 5             CallerMethod();
 6             Console.Read();
 7         }
 8 
 9         public static void CallerMethod()
10         {
11             TraceMessage("我是调用者");
12         }
13 
14         public static void TraceMessage(string msg,
15             [CallerMemberName] string name = "",
16             [CallerFilePath] string filePath = "",
17             [CallerLineNumber] int lineNumer = 0)
18         {
19             Trace.WriteLine($"{nameof(msg)}: {msg}");
20             Trace.WriteLine($"{nameof(name)}: {name}");
21             Trace.WriteLine($"{nameof(filePath)}: {filePath}");
22             Trace.WriteLine($"{nameof(lineNumer)}: {lineNumer}");
23         }
24     }

图片 13

  每回调用 CallerMethod 方法时,调用方音信将替换为可选参数的变量。

 

  1.备注

  你必得为各样可选参数内定显式暗中同意值。不可能将调用方消息本性应用于未钦点为可选的参数。

  调用方音信个性不会使参数成为可选参数。相反,它们会在不经意此参数时影响传播的暗中认可值。

  在编写翻译时,调用方音讯值将用作文本传入中间语言 (IL)。与那四个的 StackTrace 本性的结果不相同,这几个结果不受模糊管理的熏陶。

  你可显式提供可选参数来支配调用方新闻或隐讳调用方消息。

 

传送门

  《C# 知识回看 - 性情Attribute》

  《C# 知识回看 - 种类化》

  《C# 知识回想 - 表明式树 Expression Trees》

 

 


【参照他事他说加以考察】微软官方文书档案

 

本文由金沙贵宾会官方网址发布于www.js36663.com,转载请注明出处:[C#] 剖析 AssemblyInfo.cs - 了解常用的特性 Attribute

关键词: