首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于C#项目,如果有人试图使用框架类中的特定方法,如何引发自定义构建错误?

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

Stack Overflow用户
提问于 2019-03-01 14:53:12
回答 2查看 156关注 0票数 0

对于C#项目,我想包括一个构建步骤或项目中集成的东西,如果任何开发人员试图使用框架类中的特定方法,则会引发构建错误,相反,我希望开发人员对此使用扩展方法。然而,我想把它作为编译时错误来强加。作为一个例子,为了名字的缘故,我希望给定项目的开发人员不要使用string.Intern,而应该始终使用string.SpecialIntern。实现这一目标的不同方法有哪些?我试着使用Roslyn-code-analysis,但是不能真正为这个写出工作规则,所以我不确定这是否是这个问题的正确解决方案。有没有人可以用一些例子详细地指导我如何解决这个问题?

EN

回答 2

Stack Overflow用户

发布于 2019-03-01 23:28:04

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

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

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

票数 1
EN

Stack Overflow用户

发布于 2019-03-01 20:20:12

AFAIK没有办法实现你想做的事情。

但是,一种解决方案是简单地调用扩展方法。

代码语言:javascript
复制
public static class Extension
{
    public static bool DoStuff(this Class stuff)
    {
        return false;
    }
}

public class Class
{
    public bool DontCallMe()
    {
        return this.DoStuff();
    }
}
代码语言:javascript
复制
Class myClass = new Class();
myClass.DontCallMe();

显然,只有当您可以更改类的代码时(我想您不能),这才能起作用。

如果该方法被标记为virutal,您可以创建一个Wrapper-Class来覆盖该方法。

代码语言:javascript
复制
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文章中描述的那样做。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54939407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档