我正在嘗試爲CRUD
類創建一些腳手架,並且希望使用T4協助構建這些類。我剛剛開始並且遇到了一個問題,即調用一個生活在同一個項目中的類。例如:從T4模板調用同一個項目中的類
<#@ import namespace="System.Collections.Generic" #>
<#@ template language="C#" #>
<#@ output extension=".cs" #>
<#@ include file="T4Toolbox.tt" #>
using System;
using System.Data;
using System.Data.Linq;
using System.Collections.Generic;
namespace TTFileGenerator
{
<#var entityName = "TEST";#>
public class <#=entityName#>
{
<#
MyClass myClass = new MyClass();
List<string> something = myClass.GetSomething()
...
#>
}
}
錯誤:
Compiling transformation: The type or namespace name 'MyClass' could not be found (are you missing a using directive or an assembly reference?)
它是在同一個項目中的公共類。我可以從項目中的其他類訪問它,而不是T4文件。還是一個T4新手。任何方向將不勝感激。
感謝。我懷疑這就是爲什麼我看到類似的代碼在其他例子中工作,而它從來沒有真正解釋過。我將嘗試分解應用程序,以便執行該工作的TT可以引用一個程序集,該程序集託管我正在嘗試調用的方法。 – user3219570
VS2012/VS2013應該將程序集加載到不同的應用程序域/影子複製中,以便它不應該鎖定dll。另一種方法是使用roslyn加載語法樹,並且我看過一些使用IDE api的其他文章(以某種方式)。我個人更喜歡在T4文件中定義模型。 – FuleSnabel
@FuleSnabel,這是很好的知道。爲了澄清,我最後一次嘗試使用Design-Time T4生成器引用一個程序集,它在VS2010中;當時,它鎖定了大會。 –