如this documentation page所述,ReSharper實際上可以識別自定義註釋,即使它們是在「JetBrains.Annotations」以外的命名空間中定義的。因此,您可以定義自己的自定義註釋,並將其中的一些轉換爲應用代碼合約到目標元素的方面提供程序。
首先打開「ReSharper選項」| 「代碼註釋」並單擊「將C#實現複製到剪貼板」。另外,取消選中「內部」可重複使用項目中的註釋。
然後創建一個新的代碼文件並粘貼註釋。您可以重命名命名空間(例如MyAnnotations
)。如果您選擇使用自定義命名空間,則需要再次打開「ReSharper選項」,並在「自定義命名空間應在下面列表中標記」中選擇自定義命名空間旁邊的複選框。
現在,你可以找到NotNullAttribute
和更改以下面的方式它的源代碼:
public sealed class NotNullAttribute : LocationLevelAspect, IAspectProvider
{
public IEnumerable<AspectInstance> ProvideAspects(object targetElement)
{
var requiredConstruction = new ObjectConstruction(typeof(PostSharp.Patterns.Contracts.RequiredAttribute));
yield return new AspectInstance(targetElement, requiredConstruction, null);
}
}
你可以在你的代碼應用此自定義屬性,它會工作既是PostSharp方面和ReSharper的註解。
public void Foo ([MyAnnotations.NotNull] object bar)
據我所知 - 你不能配置它尋找的屬性。您可以使用腳本來生成[此配置文件](https://www.jetbrains.com/help/resharper/2016.1/Code_Analysis__External_Annotations.html),該腳本將使用反射來查找「必需」並在文件中應用正確的規則。雖然不理想。 – Rob