7

自動生成されたクラスを ExcludeFromCodeCoverage としてマークする方法はありますか。私は他の分野でその属性を使用しており、うまく機能しています。しかし、自動生成された人のコードを開いてクラスを ExcludeFromCodeCoverage としてマークすると、そのクラスを再生成すると上書きされます。

dbml のコード ビハインドで部分クラスを作成し、その属性をそれに適用すると機能しますが、多くの部分クラスが作成されます。

4

1 に答える 1

6

PostSharpまたは他のAOPフレームワークを使用して、指定されたタイプまたは名前空間に適用されるアスペクトを作成できますExcludeFromCodeCoverageAttribute

[Serializable]
[AttributeUsage(AttributeTargets.Assembly)]
[MulticastAttributeUsage(MulticastTargets.Class | MulticastTargets.Struct)]
[ProvideAspectRole(StandardRoles.PerformanceInstrumentation)]
public sealed class DisableCoverageAttribute : TypeLevelAspect, IAspectProvider
{
    public IEnumerable<AspectInstance> ProvideAspects(object targetElement)
    {
        Type disabledType = (Type)targetElement;

        var introducedExclusion = new CustomAttributeIntroductionAspect(
              new ObjectConstruction(typeof (ExcludeFromCodeCoverageAttribute)));

        return new[] {new AspectInstance(disabledType, introducedExclusion)};
    }
}

次に、このアスペクトをアセンブリに適用し、除外する名前空間を指定します。コンパイル中に、PostSharpは名前空間ExcludeFromCodeCoverageAttribute内のすべてのクラスに追加します。My.AutogeneratedCode

[assembly: DisableCoverage(AttributeTargetTypes="My.AutogeneratedCode.*")]

サンプルコードと説明はここにあります

于 2012-06-26T08:57:44.610 に答える