Aracılığıyla paylaş


T4 Şablon Yönergesi

Visual Studio T4 metin şablonu genellikle şablonun nasıl işlenmesi gerektiğini belirten bir template yönergeyle başlar. Bir metin şablonu ve içerdiği herhangi bir dosya içinde birden fazla şablon yönergesi bulunmamalıdır.

Metin şablonları yazmaya genel bir genel bakış için bkz . T4 Metin Şablonu Yazma.

Şablon Yönergesini Kullanma

<#@ template [language="VB"] [compilerOptions="options"] [culture="code"] [debug="true"] [hostspecific="true"] [inherits="templateBaseClass"] [visibility="internal"] [linePragmas="false"] #>

yönergesi template , dönüşümün farklı yönlerini belirtmenize olanak sağlayan çeşitli özniteliklere sahiptir. Tüm öznitelikler isteğe bağlıdır.

compilerOptions özniteliği

Örnek:

compilerOptions="optimize+"

Geçerli değerler:

Tüm geçerli derleyici seçenekleri.

Çalışma zamanı (önceden işlenmiş) şablonları için yok sayılır.

Bu seçenekler, şablon Visual C# veya Visual Basic'e dönüştürüldüğünde ve sonuçta elde edilen kod derlendiğinde uygulanır.

culture özniteliği

Örnek:

culture="de-CH"

Geçerli değerler:

Sabit kültür olan "" varsayılan değerdir.

xx-XX biçiminde bir dize olarak ifade edilen bir kültür. Örneğin, en-US, ja-JP, de-CH, de-DE. Daha fazla bilgi için bkz. System.Globalization.CultureInfo.

Culture özniteliği, bir ifade bloğu metne dönüştürüldüğünde kullanılacak kültürü belirtir.

debug özniteliği

Örnek:

debug="true"

Geçerli değerler:

true

false (varsayılan)

debug özniteliği isetrue, ara kod dosyası hata ayıklayıcının şablonunuzda bir kesme veya özel durum oluştuğu konumu daha doğru şekilde tanımlamasını sağlayan bilgiler içerir.

Tasarım zamanı şablonları için ara kod dosyası %TEMP% dizininize yazılır.

Hata ayıklayıcıda bir tasarım zamanı şablonu çalıştırmak için metin şablonunu kaydedin, ardından metin şablonunun kısayol menüsünü Çözüm Gezgini açın ve T4 Şablonunda Hata Ayıkla'yı seçin.

hostspecific özniteliği

Örnek:

hostspecific="true"

Geçerli değerler:

true

false (varsayılan)

trueFromBase

Bu özniteliğin değerini olarak trueayarlarsanız, adlı Host bir özellik, metin şablonunuz tarafından oluşturulan sınıfa eklenir. özelliği, dönüştürme altyapısının konağına bir başvurudur ve ITextTemplatingEngineHost olarak bildirilir. Özel bir sunucu tanımladıysanız, bunu özel ana bilgisayar türüne atayabilirsiniz.

Bu özelliğin türü ana bilgisayarın türüne bağlı olduğundan, yalnızca belirli bir ana bilgisayar ile çalışan bir metin şablonu yazıyorsanız faydalıdır. Tasarım zamanı şablonları için geçerlidir, ancak çalışma zamanı şablonları için geçerli değildir.

true Olduğunda hostspecific ve Visual Studio kullanıyorsanız, Visual Studio özelliklerine erişmek için IServiceProvider'a yayınlayabilirsinizthis.Host. Projedeki bir dosyanın mutlak yolunu elde etmek için de kullanabilirsiniz Host.ResolvePath(filename) . Örneğin:

<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ output extension=".txt" #>
<#@ assembly name="EnvDTE" #>
<#@ import namespace="EnvDTE" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="Microsoft.VisualStudio.TextTemplating" #>
<# // Get the Visual Studio API as a service:
 DTE dte = ((IServiceProvider)this.Host).GetCOMService(typeof(DTE)) as DTE;
#>
Number of projects in this solution: <#=  dte.Solution.Projects.Count #>

<#
 // Find a path within the current project:
 string myFile = File.ReadAllText(this.Host.ResolvePath("MyFile.txt"));
#>
Content of myFile is:
<#= myFile #>

ve hostspecific özniteliklerini birlikte kullanırsanızinherits, türetilmiş sınıfta host="trueFromBase" ve temel sınıfta host="true" belirtin. Bu, oluşturulan kodda özelliğin Host çift tanımını önler.

language özniteliği

Örnek:

language="VB"

Geçerli değerler:

C# (varsayılan)

VB

özniteliği, language deyim ve ifade bloklarındaki kaynak kod için kullanılacak dili (Visual Basic veya Visual C#) belirtir. Çıktının oluşturulmasında kullanılan ara kod dosyası bu dili kullanır. Bu dil, şablonunuzun oluşturduğu ve herhangi bir türdeki bir metin olabilecek dille ilişkili değildir.

Örneğin:

<#@ template language="VB" #>
<#@ output extension=".txt" #>
Squares of numbers:
<#
  Dim number As Integer
  For number = 1 To 4
#>
  Square of <#= number #> is <#= number * number #>
<#
  Next number
#>

inherits özniteliği

Şablonunuzun program kodunun, bir metin şablonundan oluşturulabilen başka bir sınıftan devralma işlemi yapabileceğini belirtebilirsiniz.

Çalışma zamanı (önceden işlenmiş) metin şablonunda devralma

Türetilmiş birkaç varyanta sahip bir temel şablon oluşturmak için çalışma zamanı metin şablonları arasında devralmayı kullanabilirsiniz. Çalışma zamanı şablonları, Özel Araç özelliğinin TextTemplatingFilePreprocessor olarak ayarlandığı şablonlardır. Çalışma zamanı şablonu, şablonda tanımlanan metin oluşturmak için uygulamanızda çağırabildiğiniz bir kod oluşturur. Daha fazla bilgi için bkz . T4 Metin Şablonları ile Çalışma Zamanı Metin Oluşturma.

Bir inherits öznitelik belirtmezseniz, metin şablonunuzdan bir temel sınıf ve türetilmiş bir sınıf oluşturulur. Bir inherits öznitelik belirttiğinizde, yalnızca türetilmiş sınıf oluşturulur. Bir taban sınıfı elle yazabilirsiniz, ancak türetilmiş sınıf tarafından kullanılan yöntemleri sağlaması gerekir.

Daha genel bir durum, önceden işlenmiş başka bir şablonu taban sınıf olarak belirtmenizdir. Temel şablon, türetilmiş şablonlara ait metinle ayrılabilen ortak metin blokları sağlar. Metin parçaları içeren yöntemleri tanımlamak için sınıf özellik bloklarını <#+ ... #> kullanabilirsiniz. Örneğin, türetilmiş şablonlarda geçersiz kılınabilen sanal yöntemler sağlayacak şekilde, çıktı metninin çerçevesini temel şablona yerleştirebilirsiniz:

Çalışma zamanı (önceden işlenmiş) metin şablonu BaseTemplate.tt:

This is the common header.
<#
  SpecificFragment1();
#>
A common central text.
<#
  SpecificFragment2();
#>
This is the common footer.
<#+
  // Declare abstract methods
  protected virtual void SpecificFragment1() { }
  protected virtual void SpecificFragment2() { }
#>

Çalışma zamanı (önceden işlenmiş) metin şablonu DerivedTemplate1.tt:

<#@ template language="C#" inherits="BaseTemplate" #>
<#
  // Run the base template:
  base.TransformText();
#>
<#+
// Provide fragments specific to this derived template:
protected override void SpecificFragment1()
{
#>
   Fragment 1 for DerivedTemplate1
<#+
}
protected override void SpecificFragment2()
{
#>
   Fragment 2 for DerivedTemplate1
<#+
}
#>

DerivedTemplate1 olanağını çağırmak için uygulama kodu:

Console.WriteLine(new DerivedTemplate().TransformText());

Sonuç çıktısı:

This is the common header.
   Fragment 1 for DerivedTemplate1
A common central text.
   Fragment 2 for DerivedTemplate1
This is the common footer.

Temel ve türetilmiş sınıfları farklı projelerde oluşturabilirsiniz. Temel projeyi veya derlemeyi türetilmiş projenin başvurularına eklemeyi unutmayın.

Ayrıca sıradan bir elle yazılmış sınıfı taban sınıf olarak kullanabilirsiniz. Taban sınıfın, türetilmiş sınıf tarafından kullanılan yöntemleri sağlaması gerekir.

Uyarı

ve hostspecific özniteliklerini birlikte kullanırsanızinherits, türetilmiş sınıfta hostspecific="trueFromBase" ve temel sınıfta host="true" belirtin. Bu, oluşturulan kodda özelliğin Host çift tanımını önler.

Tasarım zamanı metin şablonunda devralma

Tasarım zamanı metin şablonu, Özel Araç'ın TextTemplatingFileGenerator olarak ayarlandığı bir dosyadır. Şablon, Visual Studio projenizin bir parçasını oluşturan bir kod veya metin çıkış dosyası oluşturur. Çıktı dosyasını oluşturmak için, şablon ilk olarak genellikle görmediğiniz bir ara program kod dosyasına çevrilir. inherits özniteliği, bu ara kod için temel sınıfı belirtir.

Tasarım zamanı metin şablonu için, öğesinden Microsoft.VisualStudio.TextTemplating.TextTransformationtüretilen herhangi bir temel sınıfı belirtebilirsiniz. <#@assembly#> Temel sınıfı içeren derlemeyi veya projeyi yüklemek için yönergesini kullanın.

Daha fazla bilgi için Gareth Jones Blogu'ndaki "Metin Şablonlarında Devralma" bölümüne bakın.

linePragmas özniteliği

Örnek:

linePragmas="false"

Geçerli değerler:

true (varsayılan)

false

Bu özniteliğin false olarak ayarlanması, oluşturulan kod içinde satır numaralarınızı tanımlayan etiketleri kaldırır. Bu, derleyicinin tüm hataları oluşturulan kodun satır numaralarını kullanarak bildireceği anlamına gelir. Metin şablonunun veya oluşturulan kodun hatalarını ayıklamayı seçebileceğiniz için bu size daha fazla hata ayıklama seçeneği sunar.

Bu öznitelik, pragmalardaki mutlak dosya adlarının kaynak kodu denetimi altında dikkat dağıtıcı birleştirmelere neden olduğunu fark ederseniz de yardımcı olabilir.

visibility özniteliği

Örnek:

visibility="internal"

Geçerli değerler:

public (varsayılan)

internal

Bir çalışma zamanı şablonunda, bu, oluşturulan sınıfın görünürlük özniteliğini ayarlar. Varsayılan olarak, sınıfı kodunuzun genel API'sinin bir parçasıdır, ancak ayarlayarak visibility="internal" yalnızca kodunuzun metin oluşturan sınıfı kullanabilmesini sağlayabilirsiniz.