|
|
1
4
如果这是用于XML序列化和nHibernate的,那么您希望可以访问无参数构造函数(如 example 您引用了),然后使用私有或受保护的无参数构造函数进行序列化,或者使用受保护的nHibernate构造函数。有了受保护的版本,您就可以打开自己的大门,让继承的类能够调用该代码。 如果不希望代码调用方法,请不要使其可访问。 编辑:为了回答更深层的问题,AFAIK编译器只知道三个属性: Obsolete, Conditional, and AttributeUsage . 要为其他属性添加特殊处理,需要修改编译器。 |
|
|
2
5
我认为这对于微软来说是一个很好的特性请求:创建一个抽象的基类属性
|
|
|
3
3
|
|
|
4
1
我认为唯一简单的方法是扩展Visual Studio(通过VSIP)并订阅正确的事件(可能在envdte.buildEvents)类,检查代码中构造函数的用法,如果检测到,则取消生成。 |
|
|
5
0
这一切听起来都有点像 Yesterday's TDWTF . -) |
|
|
6
0
我必须同意格雷格的观点:为它编一个属性。 如果您真的很认真,那么可以找到一种方法来确定构造函数是否正被除xmlserializer之外的任何对象访问,如果是,则抛出异常。 |
|
7
0
我建议您使用错误指令。 另一个可能完成这项工作的未知属性是 conditional attribute (取决于你想做什么)
如果定义了“my_条件”,它将从IL代码本身删除方法调用。 |
|
|
8
0
创建一个fxcop规则,并将fxcop添加到集成构建中以检查这一点。 您将得到警告,而不是失败的构建。属性“运行”在反射时间而不是生成时间。 或者(这相当糟糕)在不想被调用的方法周围放置一个编译器指令。然后,如果调用它,代码就会中断,但是您可以设置一个通过正确编译器指令而不通过的构建。 |
|
|
9
0
作为后期生成步骤引发自定义异常并对其进行单元测试 |
|
|
10
0
4年后回复:) 我也有同样的问题,是否有替代过时的方法。 据我回忆(Channel9视频)不久前,微软说它正在努力让开发者在某个时候访问类似编译器API的东西,所以将来你可以编写一个编译器“插件”,它允许用你自己的自定义属性修饰方法,并告诉编译器如果它看起来像比如装饰代码可以在代码中的其他地方调用。 当你想到这件事的时候,会觉得很酷。它还提醒我,我还应该试着读一读微软正在研究的编译器API的进展… |
|
|
11
-1
为什么不编点什么呢?一个未知的属性肯定会破坏构建。
|