これは、 PostSharpを使用してコンパイル時に実行できます。コンパイル後に静的コードウィービング(ポストコンパイルのプロセスとも呼ばれます)を使用するAOPフレームワークは、コード設計を検証するためのAPIを提供します。これを示す簡単な例を作成しました。属性を定義する
public class MyAttribute : Attribute
{
}
次に、この属性を適用するクラスに進みます。エラーを取得するために属性をコメントアウトします。
//[MyAttribute]
internal class Program
{
private static void Main(string[] args)
{
Console.WriteLine("Hello World");
}
}
今あなたのクレートAspect
。MyAttribute
コンパイル後の時点で存在するかどうかをチェックし、存在しProgram
ない場合はエラーメッセージを入力します。
[Serializable]
public class MyValidationAspect : AssemblyLevelAspect
{
public override bool CompileTimeValidate(_Assembly assembly)
{
IEnumerable<object> myAttributes = typeof (Program).GetCustomAttributes(inherit: true)
.Where(atr => atr.GetType() == typeof (MyAttribute));
if (!myAttributes.Any())
Message.Write(MessageLocation.Of(typeof (Program)), SeverityType.Error, "DESIGN1",
"You haven't marked {0} with {1}", typeof (Program), typeof (MyAttribute));
return base.CompileTimeValidate(assembly);
}
}
次に、次のように、アセンブリレベルでこのアスペクトを定義します。
[assembly: MyValidationAspect]
したがって、ソリューションを構築しようとすると、エラーが発生します。
PostSharpPlay.exe
私のコンソールアセンブリの名前です。前にコメントを削除するMyAttribute
と、ソリューションがコンパイルされ、エラーは発生しません。