Методы расширения в T4 - PullRequest
5 голосов
/ 28 марта 2012

Я пытаюсь использовать 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 ]

2 голосов
/ 29 августа 2014

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

что в итоге мне помогло, так это использование макроса visual studio vars , а затем импорт пространства имен

 <#@ assembly name="$(ProjectDir)$(OutDir)\AssemblyName.dll" #>
1 голос
/ 28 марта 2012

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

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

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

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

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

...