2012-03-28 15 views
5

Ich versuche PGK.Extensions in einer T4-Vorlage in VS2008 für VB.NET zu verwenden, und ich bekomme:Erweiterungsmethoden in T4

RemoveAllSpecialCharacters ist kein Mitglied der Zeichenfolge ..

Meine T4-Headern:

<#@ template language="VB" hostspecific="false" debug="true" inherits="Microsoft.VisualStudio.TextTemplating.VSHost.ModelingTextTransformation" #> 
<#@ output extension="vb" #> 

<#@ assembly name="PGK.Extensions.dll" #> // the dll is found 
<#@ import namespace="StringExtensions" #> //Try with and without namespace 

Einsatz von Verlängerungs in Blockcode:

<# 
    Me.WriteLine(item.Name.RemoveAllSpecialCharacters.ToUpper) 
#> 

RemoveAllSpecialCharacters ist eine String-Erweiterungsmethode aus PGK.Extensions.dll.

Kann mir jemand helfen?

BEARBEITET:

OK. Es ist:

Aber das bricht DevArt T4 Editor Intellisense und Syntax Highlight in VS2008 Plugin. Verwenden Sie stattdessen Tangible T4 Editor.

Antwort

1

Während eine Erweiterungsmethode aus einem auf ein Objekt anzuwendenden Code angezeigt wird, wird sie tatsächlich als statische Methode kompiliert. Diese link von Microsoft wird Ihnen weitere Informationen dazu geben.

So ruft item.Name.RemoveAllSpecialCharacters() in der Tat als StringExtensions zusammengestellt .RemoveAllSpecialCharacters (item.Name)

Daher könnten Sie versuchen, schriftlich (nicht getestet, aber funktionieren sollte):

<# 
    StringExtensions.RemoveAllSpecialCharacters(item.Name).ToUpper() 
#> 

Hoffe, dass hilft.

+0

Seine Werke aber bricht die Macht der Erweiterungsmethoden. Ich fand diesen Link http://blogs.msdn.com/b/garethj/archive/2008/10/30/using-extension-methods-in-t4-templates.aspx und für den Autor funktioniert. Vielleicht C#, aber nicht VB? – jlvaquero

+0

Sie können MS immer bitten, Erweiterungsmethoden in T4-Vorlagen richtig zu implementieren: D ... Aber ich fürchte, bis dahin haben Sie keine andere Wahl. –

+0

Und wenn Sie die Version von VB.NET in Ihrer Deklaration angeben? Etwas wie <# @ template language = "VBv9" debug = "true" #>, wobei v3.5 durch die letzte Versionsnummer von VB ersetzt wird (9 oder 10 glaube ich)? Funktioniert es ? –

2

Hatte eine harte Zeit, um dies selbst zu arbeiten, auch mit dem Blog-Post gefunden here (auch von @ Jlvaquero in einem Kommentar oben verwiesen).

was schließlich arbeitete für mich die visual studio macro vars dann wurde unter Verwendung importieren Sie den Namespace

<#@ assembly name="$(ProjectDir)$(OutDir)\AssemblyName.dll" #>