T4中的扩展方法

时间:2012-03-28 07:43:29

标签: vb.net visual-studio-2008 .net-3.5 t4 tangible-t4-editor

我正在尝试在VS2008 for VB.NET的T4模板中使用PGK.Extensions,我得到:

  

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" ...

但这打破了VS2008插件中的DevArt T4编辑器智能感知和语法高亮。请改用有形T4编辑器。

2 个答案:

答案 0 :(得分:2)

很难让自己开始工作,即使找到了here的博文(在上面的评论中也被@jlvaquero引用)。

最终对我有用的是使用visual studio macro vars然后导入命名空间

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

答案 1 :(得分:1)

虽然从要应用于对象的代码中出现扩展方法,但实际上它是作为静态方法编译的。来自Microsoft的link将为您提供更多相关信息。

因此调用item.Name.RemoveAllSpecialCharacters()实际上编译为 StringExtensions .RemoveAllSpecialCharacters(item.Name)

因此,您可以尝试写作(未经测试,但应该有效):

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

希望有所帮助。