T4代:VsNamespaceSuggestion()从哪里拉?

时间:2011-05-10 16:14:07

标签: c# entity-framework code-generation t4

有人知道,在.tt文件中,code.VsNamespaceSuggestion()从哪里获取其命名空间?

我遇到了一个问题,我必须更改解决方案的命名空间,我发誓我已经在任何地方更改了它(文件夹名称,文件名,项目名称,项目属性,程序集信息等)。但是当.tt文件运行时,它总是将旧命名空间放回其生成的类中。我被告知它来自EF模型,但我没有看到任何显示命名空间(在设计器/属性中或通过在NotePad中打开.edmx文件)。

有什么想法?对于hack,我只是在下一行中使用我想要的命名空间覆盖它:

string namespaceName = code.VsNamespaceSuggestion();
namespaceName = "Desired.Namespace"; //HACK:

4 个答案:

答案 0 :(得分:56)

刚出现这个确切的问题,我发现的解决方案在这里没有提及,所以我想我会帮助那些在搜索中遇到这篇文章的人。

单击生成实体的代码生成* .tt文件。在属性窗格中,将“自定义工具命名空间”设置为您要生成的命名空间。我的空白,所以T4从默认的项目命名空间+文件夹heirarchy生成命名空间。

答案 1 :(得分:3)

Visual Studio中的T4主机使用名称“NamespaceHint”从CallContext属性包中提取它。

该值由标准T4自定义工具(SingleFileGenerator)机制填充,使用为自定义工具指定的默认命名空间,该工具从项目默认命名空间派生,从项目根目录到tt文件的路径或明确在自定义工具规范下面的属性网格中指定(如@mattkab在他的回答中所述)

如果您正在使用代码中的T4服务,可以通过自己设置Call​​Context来填充它。

答案 2 :(得分:2)

只需将* .tt文件的属性修改为以下图片,并立即生效。:

Default is empty

答案 3 :(得分:1)

我想我已经解决了这个问题。在sra的评论之后,我重新检查了所有项目的默认命名空间,以确保,但一切都确实正确。

“查找所有文件”没有发现任何内容。我使用了一个名为Agent Ransack的免费工具,它找到了一个带有名为 标签的.csproj文件,其中包含旧的命名空间。我改变了,这就是解决它的原因。

AR还在一堆bin / Debug文件(abosluteFileList和缓存文件)中找到了旧命名空间。我删除了所有这些文件,以便使用新的命名空间重新生成它们。我不知道这是否有任何影响。

AR还在我的.suo文件中找到了实例。由于问题似乎已得到修复,我没有删除该文件(不幸的是,你无法在NotePad中编辑它)。