【发布时间】:2018-12-08 06:24:14
【问题描述】:
我需要能够将 DisplayAttribute 应用于类,但它的 AttributeUsage 在当前的 .NET / .NET Core 版本中不允许这样做。它看起来像 has been remedied for .NET Core vNext,但如果有一些解决方法能够以某种方式忽略或覆盖此限制,直到此更改进入 .NET 版本,这将非常有帮助。我能看到的唯一选择是重新实现整个事情(包括本地化),但我真的不想为了在 .NET vNext 出现后立即弃用它而支持和测试它。
有什么聪明的想法/技巧吗?
AttributeUsage 限制是在运行时由 CLR 验证还是只是编译时限制?如果它们仅在编译时检查,那么是否有一种聪明的方法来更改编译器使用的元数据以“欺骗”它以允许使用或以某种方式修改系统程序集,以便我的开发机器允许使用?
*我似乎无法编辑赏金描述,所以只是为了澄清一下,赏金的解决方案必须适用于 .NET Framework,奖励积分也适用于 .NET Core。
【问题讨论】:
-
完整的框架也不允许。有很多方法使用该属性,它们必须以一种不明显的方式进行扩展。当您选择一个与微软计划不兼容的产品时,真是太可惜了。如果他们真的做到了,那就不是什么承诺了。本地化类名,嗯,向我们展示了对它的实际需求。
-
@HansPassant 根据我问题中的链接,.NET Core 似乎已经进行了更改,所以我不确定您的意思。就用途而言,这只是一种很好且简单的方法,它允许开发人员使用友好的可本地化名称和描述来注释类,以便在为它们自动生成视图时正确显示它们。
-
@HansPassant 出于好奇,需要以不明显的方式扩展方法是什么意思。
-
System.ComponentModel 中的DisplayName 属性可以作为替代解决方案应用于类。它适用于 .Net 和 .Net Core。
-
@OL。谢谢你的建议。我已经添加了对 DisplayNameAttribute 和 DescriptionAttribute 的支持作为糟糕的替代品,但由于各种原因,它远不理想。我猜我们只是放弃并重新实现 DisplayAttribute 并将其称为 ClassDisplayAttribute 或类似的东西来获得所需的功能。
标签: c# .net .net-core custom-attributes