对于C#项目,我想包括一个构建步骤或项目中集成的东西,如果任何开发人员试图使用框架类中的特定方法,则会引发构建错误,相反,我希望开发人员对此使用扩展方法。然而,我想把它作为编译时错误来强加。作为一个例子,为了名字的缘故,我希望给定项目的开发人员不要使用string.Intern,而应该始终使用string.SpecialIntern。实现这一目标的不同方法有哪些?我试着使用Roslyn-code-analysis,但是不能真正为这个写出工作规则,所以我不确定这是否是这个问题的正确解决方案。有没有人可以用一些例子详细地指导我如何解决这个问题?
发布于 2019-03-01 23:28:04
这听起来像是您可以使用自定义代码分析器来完成的事情。我还没有尝试过,但我相信可以编写自己的分析器。
这篇来自微软的文章声称告诉你如何做到这一点:
以下是该文章中引用的教程的直接链接:
发布于 2019-03-01 20:20:12
AFAIK没有办法实现你想做的事情。
但是,一种解决方案是简单地调用扩展方法。
public static class Extension
{
public static bool DoStuff(this Class stuff)
{
return false;
}
}
public class Class
{
public bool DontCallMe()
{
return this.DoStuff();
}
}Class myClass = new Class();
myClass.DontCallMe();显然,只有当您可以更改类的代码时(我想您不能),这才能起作用。
如果该方法被标记为virutal,您可以创建一个Wrapper-Class来覆盖该方法。
public static class Extension
{
public static bool DoStuff(this Class stuff)
{
return false;
}
}
public class Class : Base
{
public override bool DontCallMe()
{
return this.DoStuff();
}
}
public class Base
{
public virtual bool DontCallMe()
{
return false;
}
}另一种方法是按照我在这篇this文章中描述的那样做。
https://stackoverflow.com/questions/54939407
复制相似问题