Использование типа шаблона T4 в Visual Studio - PullRequest
0 голосов
/ 14 октября 2011

Я хотел бы знать, могу ли я считать данные из базы данных и сгенерировать файл конфигурации, используя функцию шаблонов T4 в Visual Studio 2010.

По сути, я развернул свой проект как надстройку Visual Studio.,Итак, когда пользователь создает новое приложение из моего шаблона, мне нужно получить некоторые данные из БД, а затем создать файл конфигурации, который пользователь может использовать в своем приложении.

Возможно ли это в T4 [.tt] или есть какой-нибудь другой способ реализовать эту функцию в visual studio 2010. Если да, дайте мне ссылку, чтобы я мог получить практические советы и вернуться в случае разъяснений.

1 Ответ

3 голосов
/ 14 октября 2011

Да, конечно, вы можете. Вы можете написать любой код c # в t4, поэтому, если вы можете написать его в c #, вы можете написать его в tt.

Например, этот файл TT будет выводить содержимое некоторой таблицы в нужный файл:

    <#@ template language="C#v3.5" hostspecific="true"#>
    <#@ output extension="cs" #>
    <#@ assembly name="System.Core" #>
    <#@ assembly name="System.Data" #>
    <#@ assembly name="System.Data.DataSetExtensions" #>
    <#@ assembly name="System.Xml" #>
    <#@ assembly name="System.Xml.Linq" #>
    <#@ import namespace="System.IO" #>
    <#@ import namespace="System.Data.SqlClient" #>
    <#@ import namespace="System.Data" #>
    <#@ import namespace="System.Collections.Generic" #>
    <#@ import namespace="System.Xml" #>
    <#@ import namespace="System.Xml.Linq" #>
    <#@ import namespace="System.Text" #>
    <#@ import namespace="System.Linq" #>
    <#
    string outputFileName = @"tableContent.txt";

    string dbConnection = @"Data Source=local;Initial Catalog=mydb;user=sa;password=sa";


    System.Data.SqlClient.SqlConnection sqlConnection = new System.Data.SqlClient.SqlConnection(dbConnection);

    #>

    //Some info like 'this is generated code, do not modify' or similar... 
    //this text (because it's out of the tt region) goes into the output file

    <#
    //again, the c# code...
            SqlConnection conn = new SqlConnection(dbConnection);
            conn.Open();
            PushIndent("\t");
            string query = "SELECT something FROM myTable";
            using (IDataReader reader = new SqlCommand(query, conn).ExecuteReader())
            {
                Write("Undefined = 0");
                while(reader.Read())
                { 
                    if (reader[0] != DBNull.Value) 
                    {
                        Write("Value=" + reader[0].ToString() + Environment.NewLine);
                    }
                }
                WriteLine("");
            }
            PopIndent();
            conn.Close();

    #>
    //this goes into file end (could've also be there with Write function)

    <#
    //output to the desired file
    if (!String.IsNullOrEmpty(outputFileName))
    {
        File.WriteAllText(outputFileName, this.GenerationEnvironment.ToString());
        this.GenerationEnvironment.Remove(0, this.GenerationEnvironment.Length);
    }

    #>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...