【问题标题】:How to create a custom tool to generate code in Visual Studio 2010?如何在 Visual Studio 2010 中创建自定义工具来生成代码?
【发布时间】:2012-03-27 13:44:02
【问题描述】:

我只是想使用来自数据库表的属性生成一个类

如果我有如下的数据库表:

+-------------------+
| Id | Name         |
+----+--------------+
| 1  + foo          |
| 2  + hello.world  |
| 3  + null         |
+-------------------+

我想自动生成class,如下所示:

class MyTable {
  public static int Foo = 1;
  public static int HelloWorld = 1;
  // null was omitted for Id = 3
}

【问题讨论】:

    标签: c# visual-studio visual-studio-2010 auto-generate


    【解决方案1】:

    您可以使用 T4 转换来完成这项工作。使用“添加新项目”和“文本模板”。

    T4 语言是一种使用 C# 代码生成 C# 代码的方法。大多数文本直接解析到输出文件,新代码可以写入<##> 标签内。该文件以包装好的导入和 using 语句开头,因此一个非常简单的模板可能类似于:

       <#@ template debug="false" hostspecific="false" language="C#" #>
       <#@ import namespace="System.Data" #>
       <#@ import namespace="System.Data.SqlClient" #>
       <#@ assembly name="System.Data" #>
    
       namespace Some.Namespace
       {
           public class TestClass 
           {
        <# 
    
        using(var cnn = new SqlConnection(@"server=.\sqlexpress;Integrated Security=SSPI;Database=ApplicationManagement"))
        {
            cnn.Open();
            var cmd = new SqlCommand("SELECT TextKey, TextValue FROM TblBrandingKeyValues WHERE BrandingIdentifier = 'Default'", cnn);
    
            var reader = cmd.ExecuteReader();
    
            while (reader.Read())
            {
                var defaultText = reader.GetString(1);
                var name = reader.GetString(0);
    
    
        #>
        public string <#= name #> 
        {
            get { return "<#= defaultText #>"; } 
        }
    
        <#
            }
        }
    
         #>
    
        }
    }
    

    }

    此模板将创建一个类 TestClass,其中包含一组从数据库表 TblBrandingKeyValues 检索到的只读属性。

    我会推荐这些T4 tutorials

    【讨论】:

      【解决方案2】:

      使用T4 Templates。我用这种方式生成了很多类。

      【讨论】:

        【解决方案3】:

        如果您想创建自己的自定义工具,最好查看 System.CodeDom 命名空间 其中包含生成代码所需的一切。当然,你必须编写生成类的算法。

        更多信息请点击以下链接:

        http://msdn.microsoft.com/en-us/library/ms404245.aspx

        请记住,.NET 已经提供了许多“内置”工具/命名空间来完成完全相同的工作(例如使用实体框架)

        【讨论】:

          猜你喜欢
          • 2014-04-03
          • 2011-12-11
          • 2011-02-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多