Методы расширения в T4

Я пытаюсь использовать PGK.Extensions в шаблоне T4 в VS2008 для VB.NET, и я получаю:

RemoveAllSpecialCharacters не является членом строки..

Мои заголовки T4:

<#@ 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

Использование расширения в блочном коде:

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

RemoveAllSpecialCharacters - это метод расширения строки из PGK.Extensions.dll.

Кто-нибудь может мне помочь?

Редакция:

ХОРОШО. Это:

<#@ template language="VBv3.5" ...

Но это нарушает IntelliSense и подсветку синтаксиса редактора DevArt T4 в плагине VS2008. Вместо этого используйте Tangible T4 Editor.

2 ответа

Решение

Хотя метод расширения появляется из кода, который должен быть применен к объекту, он фактически компилируется как статический метод. Эта ссылка от Microsoft даст вам больше информации об этом.

Поэтому вызов item.Name.RemoveAllSpecialCharacters() фактически компилируется как StringExtensions.RemoveAllSpecialCharacters (item.Name)

Поэтому вы можете попробовать написать (не проверено, но должно работать):

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

Надеюсь, это поможет.

Трудно было заставить его работать, даже с постом в блоге, найденным здесь (также упоминается @jlvaquero в комментарии выше).

у меня наконец-то получилось использовать макро-переменные Visual Studio, а затем импортировать пространство имен

 <#@ assembly name="$(ProjectDir)$(OutDir)\AssemblyName.dll" #>
Другие вопросы по тегам