CodeIssue project with roslyn

本文关键字:roslyn with project CodeIssue | 更新日期: 2023-09-27 18:08:59

当有人写"new MyClass()"和MyClass Inherit from EntityBase时,是否有办法得到编译错误?我喜欢阻止开发人员写这个。

CodeIssue project with roslyn

绝对!

这正是CodeIssues设计用来处理的策略类型。您应该能够编写一个检查ObjectCreationSyntax节点的CodeIssue。检查继承的代码看起来像这样(目前不在编译器附近,所以这是来自内存):

var entityBaseType = document.Project.GetCompilation(cancellationToken).GetTypeByMetadataName("FullyQualifiedTypeName.EntityBase");
var typeInfo = document.GetSemanticModel(cancellationToken).GetTypeInfo(node);
if (typeInfo.Type.BaseType.Equals(entityBaseType))
{
    return new CodeIssue(...);
}
return null;