相关疑难解决方法(0)

自定义编译器警告

在.Net中使用ObsoleteAtribute时,它会为您提供编译器警告,告诉您对象/方法/属性已过时,应该使用其他东西.我目前正在开发一个需要大量重构前雇员代码的项目.我想编写一个自定义属性,我可以用它来标记将生成编译器警告的方法或属性,这些警告会给出我写的消息.像这样的东西

[MyAttribute("This code sux and should be looked at")]
public void DoEverything()
{
}
Run Code Online (Sandbox Code Playgroud)
<MyAttribute("This code sux and should be looked at")>
Public Sub DoEverything()
End Sub
Run Code Online (Sandbox Code Playgroud)

我想要生成一个编译器警告,上面写着"这段代码sux,应该看一下".我知道如何创建自定义属性,问题是我如何使它在visual studio中生成编译器警告.

.net c# vb.net attributes compiler-warnings

110
推荐指数
6
解决办法
4万
查看次数

生成自定义编译时警告C#

我正在使用VS2008,并希望根据属性上的自定义属性创建编译时警告/错误(如果可能).

目前有两个案例让我感兴趣:

  [MyAttribute (typeof(MyClass)]
Run Code Online (Sandbox Code Playgroud)

MyClass必须实现一个接口.目前我在属性的构造函数中声明了这一点,但由于堆栈跟踪的性质,这不容易跟踪:

 public MyAttribute (Type MyClassType)
    {
         System.Diagnostics.Debug.Assert(typeof(MyInterface).IsAssignableFrom(MyClassType),
                                         "Editor must implement interface: " + typeof(MyInterface).Name);

    }
Run Code Online (Sandbox Code Playgroud)

我感兴趣的第二种情况是我在属性中定义了一个类型,如果该类型实现了一个接口,那么如果另一个属性不存在则应该显示警告.

IE if(MyClass.Implements(SomeInterface)&&!Exists(SomeAttibute)){Generate Warning}

[MyAttribute(typeof(MyClass)] 
// Comment next line to generate warning
[Foo ("Bar")]
Run Code Online (Sandbox Code Playgroud)

谢谢!

c# compiler-construction postsharp custom-attributes

19
推荐指数
1
解决办法
4385
查看次数

创建一个属性来打破构建

好的,这是从我之前的问题开始的.

我真正想做的是创建一些属性,允许我修饰一个会破坏构建的方法.非常类似于过时("原因",真实)属性,但不会错误地识别过时的代码.

澄清:我不希望它打破任何 F6(Build)按下的构建,我只希望它打破构建,如果在代码中的其他地方调用了使用该属性修饰的方法.就像我说的,类似于过时,但不一样.

我知道我并不孤单,因为其他用户想要出于其他原因使用它.我之前从未创建过自定义属性,所以对我来说这对我来说都是新手!

.net attributes

8
推荐指数
2
解决办法
2596
查看次数