T4 Include Yönergesi
Visual Studio'daki bir metin şablonuna yönerge kullanarak başka bir <#@include#>
dosyadan metin ekleyebilirsiniz. İlk sınıf özellik bloğundan <#+ ... #>
önce metin şablonunun herhangi bir yerine yönergeleri yerleştirebilirsinizinclude
. Eklenen dosyalar, yönergeleri ve diğer yönergeleri de içerebilir include
. Bu şablon kodunu ve demirbaş metni şablonlar arasında paylaşmanızı sağlar.
Ekleme Yönergelerini Kullanma
<#@ include file="filePath" [once="true"] #>
filePath
mutlak veya geçerli şablon dosyasına göre olabilir.Ayrıca, belirli Visual Studio uzantıları ekleme dosyalarını aramak için kendi dizinlerini belirtebilir. Örneğin, Görselleştirme ve Modelleme SDK'sını (DSL Araçları) yüklediğinizde, ekleme listesine aşağıdaki klasör eklenir:
Program Files\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\DSL SDK\DSL Designer\11.0\TextTemplates
.Bu ek içerme klasörleri içeren dosyanın dosya uzantısına bağlı olabilir. Örneğin, DSL Araçları ekleme klasörüne yalnızca dosya uzantısına sahip dosyaları dahil etmek için erişilebilir
.tt
filePath
"%" ile sınırlandırılmış ortam değişkenlerini içerebilir. Örneğin:<#@ include file="%HOMEPATH%\MyIncludeFile.t4" #>
Eklenen dosyanın adının uzantısını
".tt"
kullanması gerekmez.Eklenen dosyalar gibi
".t4"
başka bir uzantı kullanmak isteyebilirsiniz. Bunun nedeni, projeye dosya.tt
eklediğinizde Visual Studio'un Özel Araç özelliğini otomatik olarak olarak olarak ayarlamasıdırTextTemplatingFileGenerator
. Tek tek dönüştürülecek dosyaları genellikle eklemek istemezsiniz.Diğer taraftan, bazı durumlarda, dosya uzantısının ek klasörlerin hangi include dosyalarının aranacağını etkilediğinin farkında olmalısınız. Diğer dosyaları içeren eklediğiniz bir dosya varsa, bu önemli olabilir.
Eklenen içerik ekleyen metin şablonunun hemen hemen parçasıymış gibi işlenir. Ancak, yönerge sıradan metin ve standart denetim blokları tarafından izlense
include
bile sınıf özellik bloğu<#+...#>
içeren bir dosya ekleyebilirsiniz.Bir şablonun birden fazla ekleme dosyasından çağrılsa bile yalnızca bir kez eklendiğinden emin olmak için kullanın
once="true"
.Bu özellik, başka bir kod parçacığının bunları zaten içerdiğinden kaygılanmadan, istediğiniz zaman ekleyebileceğiniz yeniden kullanılabilir T4 kod parçacıklarından oluşan bir kitaplık oluşturmayı kolaylaştırır. Örneğin, şablon işleme ve C# oluşturma ile ilgilenen çok ayrıntılı kod parçacıklarından oluşan bir kitaplığınız olduğunu varsayalım. Buna karşılık, bunlar daha sonra uygulamaya özgü herhangi bir şablondan kullanabileceğiniz özel durumlar oluşturma gibi göreve özgü bazı yardımcı programlar tarafından kullanılır. Bağımlılık grafiği çizerseniz, bazı iş parçacıklarının birkaç kez dahil edildiğini görürsünüz. Ancak parametresi sonraki
once
eklemeleri engeller.MyTextTemplate.tt:
<#@ output extension=".txt" #>
Output message 1 (from top template).
<#@ include file="TextFile1.t4"#>
Output message 5 (from top template).
<#
GenerateMessage(6); // defined in TextFile1.t4
AnotherGenerateMessage(7); // defined in TextFile2.t4
#>
TextFile1.t4:
Output Message 2 (from included file).
<#@ include file="TextFile2.t4" #>
Output Message 4 (from included file).
<#+ // Start of class feature control block.
void GenerateMessage(int n)
{
#>
Output Message <#= n #> (from GenerateMessage method).
<#+
}
#>
TextFile2.t4:
Output Message 3 (from included file 2).
<#+ // Start of class feature control block.
void AnotherGenerateMessage(int n)
{
#>
Output Message <#= n #> (from AnotherGenerateMessage method).
<#+
}
#>
Oluşturulan myTextTemplate.txt dosyası:
Output message 1 (from top template).
Output Message 2 (from included file).
Output Message 3 (from included file 2).
Output Message 4 (from included file).
Output message 5 (from top template).
Output Message 6 (from GenerateMessage method).
Output Message 7 (from AnotherGenerateMessage method).
MSBuild ve Visual Studio'da proje özelliklerini kullanma
$(SolutionDir) gibi Visual Studio makrolarını bir include yönergesinde kullanabilirsiniz ancak bunlar MSBuild'de çalışmaz. Şablonları yapı makinenizde dönüştürmek isterseniz, bunun yerine proje özelliklerini kullanmanız gerekir.
Proje özelliği tanımlamak için .csproj veya .vbproj dosyanızı düzenleyin. Bu örnek adlı myIncludeFolder
bir özelliği tanımlar:
<!-- Define a project property, myIncludeFolder: -->
<PropertyGroup>
<myIncludeFolder>$(MSBuildProjectDirectory)\..\libs</myIncludeFolder>
</PropertyGroup>
<!-- Tell the MSBuild T4 task to make the property available: -->
<ItemGroup>
<T4ParameterValues Include="myIncludeFolder">
<Value>$(myIncludeFolder)</Value>
</T4ParameterValues>
</ItemGroup>
Artık proje özelliğinizi metin şablonlarında kullanabilirsiniz, böylece hem Visual Studio hem de MSBuild içinde doğru dönüştürme yapılır:
<#@ include file="$(myIncludeFolder)\defs.tt" #>