对于C#Project,如果有人试图使用框架类中的特定方法,如何引发自定义构建错误?

问题描述 投票:0回答:2

对于C#项目,我想在项目中包含一个构建步骤或集成的内容,如果任何开发人员试图使用框架类中的特定方法,那么应该引发构建错误,而我希望开发人员使用扩展方法。但是我想把它强加为编译时错误。作为一个例子,为了名称,我希望开发人员在给定项目中不使用string.Intern,而应该始终使用string.SpecialIntern。有什么不同的方法来实现这一目标?我尝试使用Roslyn代码分析,但无法为此编写工作规则,所以我不确定是否能解决这个问题。有人可以通过一些例子详细指导我如何解决这个问题吗?

c# .net msbuild code-analysis roslyn-code-analysis
2个回答
1
投票

这听起来像你可以使用自定义代码分析器完成的事情。我还没有尝试过,但我相信可以编写自己的分析仪。

微软的这篇文章声称告诉你如何做到这一点:

https://docs.microsoft.com/en-us/visualstudio/extensibility/getting-started-with-roslyn-analyzers?view=vs-2017

这是该文章中引用的教程的直接链接:

https://docs.microsoft.com/en-us/dotnet/csharp/roslyn-sdk/tutorials/how-to-write-csharp-analyzer-code-fix


0
投票

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();

显然,只有你可以改变你的类的代码(我认为你不能)

如果该方法标记为虚拟,则可以创建一个覆盖该方法的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帖子中描述的内容。

© www.soinside.com 2019 - 2024. All rights reserved.