首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >T4中的扩展方法

T4中的扩展方法
EN

Stack Overflow用户
提问于 2012-03-28 07:43:29
回答 2查看 916关注 0票数 5

我试图在T4模板中使用VS2008 for VB.NET中的VS2008,我得到:

RemoveAllSpecialCharacters不是字符串的成员。

我的T4头:

代码语言:javascript
复制
<#@ 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

分块代码中扩展的使用:

代码语言:javascript
复制
<#
   Me.WriteLine(item.Name.RemoveAllSpecialCharacters.ToUpper)
#>

RemoveAllSpecialCharacters是来自PGK.Extensions.dll的字符串扩展方法。

有人能帮我吗?

编辑:

好的。它是:

代码语言:javascript
复制
<#@ template language="VBv3.5" ...

但这破坏了DevArt T4编辑器的智能感知和VS2008插件中的语法突出显示。使用有形的T4编辑器代替。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-28 07:51:21

虽然扩展方法出现在要应用于对象的代码中,但实际上它是作为静态方法编译的。这个来自微软的链接会给你更多的信息。

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

因此,您可以尝试编写(没有测试,但应该有效):

代码语言:javascript
复制
<#
    StringExtensions.RemoveAllSpecialCharacters(item.Name).ToUpper()
#>

希望这能有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2014-08-28 20:19:06

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

最后对我起作用的是使用visual studio宏vars,然后导入名称空间。

代码语言:javascript
复制
 <#@ assembly name="$(ProjectDir)$(OutDir)\AssemblyName.dll" #>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9903140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档