.net - 如何将生成的方法标记为过时?

标签 .net ado.net attributes warnings

我正在使用 强类型 DataSet 手动添加行将容易出错。我提供工厂方法 正确创建行。我想引导我类的消费者远离生成的 Add*Row *Table 上的方法类。

添加 Obsolete attributes到生成的方法会成功的。遗憾的是,它们将在下次生成代码时被删除。

我无法使用 partial methods 在非生成代码中,因为 VS2008 DataSet 设计器不使用它们。
MyType.Dataset.Designer.cs看起来有点像这样:

public partial class ThingyDataTable : global::System.Data.DataTable, global::System.Collections.IEnumerable {
    // I'd love an [Obsolete("Please use the factory method.")] here.
    // I can't use a partial method, as this method isn't partial. 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    public ShelfRow NewShelfRow()  
        return ((ShelfRow)(this.NewRow()));
    }
 }

有什么方法可以添加Obsolete来自 MyType.cs 的属性?尝试 C 风格的原型(prototype)是行不通的,因为成员已经定义。干扰 partial不起作用,因为生成的成员不是 partial .
// BROKEN EXAMPLE:
public partial class ThingyDataTable {
    // I'd love an [Obsolete("Please use the factory method.")] here.
    // I can't use a partial method, as this method isn't partial. 
    [Obsolete("Please use the factory method.")]
    public ShelfRow NewShelfRow(); // ERROR: member already defined.
}

有没有其他方法可以标记生成的方法Obsolete ?

我怎么可能告诫消费者远离生成的方法?

最佳答案

用于从 XSD 文件生成设计器文件的自定义工具并没有太多开箱即用的可配置性。

但是您可以:

  • 从键入数据集的 xsd 文件的“属性”对话框中将其删除,即将“MSDataSetGenerator”中的“自定义工具”字段设置为空。这样,您可以控制何时生成代码。但这很容易出错,因为您以后可能会忘记这样做...
  • 您可以创建自己的自定义工具来调用 xsd.exe 工具,并将所需的属性放置在适当的位置,但这意味着您在所有开发站上安装自定义工具并构建服务器。 (有关指针,请参阅 this post)
  • 或者,最后,您可以强制代码生成器创建 DataSet 的内部实现,并让这些类实现一组您可以允许您的客户使用的公共(public)接口(interface)。您的数据集类将不能直接在程序集之外的任何地方使用,但您的接口(interface)可以。

  • 后者不那么“自动”,因为您需要在界面中反射(reflect) DataSet 模式的更改,但您可以控制一切并且更加“工厂友好”。

    关于.net - 如何将生成的方法标记为过时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/584102/

    相关文章:

    c# - 加密 Web.Config (Web.Release.config) 使用 aspnet_regiis 转换文件

    entity-framework - 如何在不加载所有数据的情况下删除 Entity Framework 中的多对多关系

    jQuery 表单插件适用于 Firefox 和 IE,但向 webkit 表单添加了无效 ID?

    c# - SQL 查询输出中的空引用异常

    c# - 使用属性生成自定义 setter

    php - 读取由 PHP 生成的包含 @attributes 的 JSON(使用 jQuery)

    C# 编译器无法识别重载的 Main

    .net - 如何在c#中读取httpWebRequest的请求流,我收到错误“该流不可读”?

    c# - NUnit属性

    c# - 如何使用 C# 和 ADO.NET 查询具有 SDO_GEOMETRY 类型空间列的 Oracle 表?