5

我正在尝试在 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 编辑器。

4

2 回答 2

2

即使在这里找到了博客文章(@jlvaquero 在上面的评论中也引用了),我自己也很难让这个工作。

最终对我有用的是使用Visual Studio 宏变量然后导入命名空间

 <#@ assembly name="$(ProjectDir)$(OutDir)\AssemblyName.dll" #>
于 2014-08-28T20:19:06.213 回答
1

虽然扩展方法出现在要应用于对象的代码中,但实际上它被编译为静态方法。Microsoft 的此链接将为您提供更多信息。

所以调用 item.Name.RemoveAllSpecialCharacters() 实际上编译为StringExtensions .RemoveAllSpecialCharacters(item.Name)

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

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

希望有帮助。

于 2012-03-28T07:51:21.503 回答