2016-08-01 54 views
1
<#@ template debug="false" hostspecific="true" language="C#" #> 
<#@ assembly name="System.Core" #> 
<#@ import namespace="System.Linq" #> 
<#@ import namespace="System.Text" #> 
<#@ import namespace="System.Collections.Generic" #> 
<#@ assembly name="C:\Users\ic019672\Documents\visual studio 2015\Projects\PreTemplateLogic\PreTemplateLogic\bin\Debug\ReadfromCSV.dll" #> 
<#@ import namespace="PreTemplateLogic" #> 
<#@ import namespace="System.IO" #> 
<#@ import namespace="System.Runtime.Remoting.Messaging" #> 
<#@ import namespace="Microsoft.VisualStudio.TextTemplating" #> 
<#@ parameter type="System.String" name="Pprty" #> 
<#@ output extension=".cs" #> 
using System; 
using System.Collections.Generic; 
namespace TemplateLogic 
{ 
public partial class GeneratedClass 
{ 
Dictionary<string, Dictionary<string, string>> dataKey = new Dictionary<string, Dictionary<string, string>>(); 
    public void GenerateParentContainer(string cntrlName) 
     { 
        <# 
        Dictionary<string, Dictionary<string, string>> dataKey = new Dictionary<string, Dictionary<string, string>>(); 
        dataKey = PreTemplateLogic.ReadfromCSV.ReadcsvtoDictionary(); 
        Dictionary<string, string> dc = dataKey["ObjectName"]; 
        string parntKey = "Parent"; 
        string nameKey = "Name"; 
        string valueKey = "Value"; 
        string x = PreTemplateLogic.ObjectRepository.cntrlName; 
        string[] CntrlPrpty = ReadObjectrepository(); 
        #> 
         Console.WriteLine("<#= CntrlPrpty[0] #>"); 
     } 
    } 

}  

<#+ 
    public string[] ReadObjectrepository() 
{ 
    try 
    {   
      string[] properties; 
      string csvPath = ObjectRepository.xmlFile; 
      if (File.Exists(ObjectRepository.xmlFile)) 
      { 
       using (StreamReader reader = new StreamReader(File.OpenRead(csvPath))) 
      { 
        string line = reader.ReadLine().ToString(); 
        properties = line.Split(','); 
      } 
      return properties; 
      } 
      return null; 
    } 
    catch (Exception e) 
    { 

     throw; 
    } 
} 

#> 

這裏更新參數就是我要達到什麼樣的:模板代碼生成不是從文件

  1. 我需要在運行時生成代碼。
  2. 代碼的一些參數是從外部文件中獲取的(它經常更新)。
  3. 在調用此模板時,它需要從文件中提取參數並生成代碼。

我從另一個解決方案使用自定義主機從外部調用模板。 ReadcsvtoDictionary將一些數據讀取到字典datakey,這是T4模板在運行時所需的。 現在,即使我更新這是由ReadcsvtoDictionary讀取該文件,並再次調用模板,我沒有得到texttemplate獲得新的數據..

+0

你想在這裏解決什麼問題?忽略了你解決問題的嘗試以及它的問題。 – AnthonyLambert

+1

這是我想要實現的。1.我需要在運行時生成代碼。 2.代碼的一些參數是從外部文件中獲取的(它經常更新)。 3.在調用此模板時,它需要從文件中提取參數並生成代碼。 –

+0

請幫忙嗎? –

回答

0

你可以寫在局部類的ReadObjectrepository方法,此模板。

爲什麼你沒有將ReadObjectrepository()結果傳遞給模板構造函數中的模板代碼?

構造函數也可以在部分類中。

以這種方式調試將是最簡單的。