2011-05-10 41 views
23

有没有人知道,在.tt文件中,code.VsNamespaceSuggestion()从哪里获取其名称空间?T4代:VsNamespaceSuggestion()从哪里拉?

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

有什么想法?对于一个黑客,我只是覆盖它与我想的命名空间的下一行:

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

回答

1

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

“在文件中查找所有文件”没有出现任何内容。我使用了一个名为Agent Ransack的免费工具,它找到了一个名为的标签.csproj文件,其中包含旧的名称空间。我改变了这一点,这是固定它。

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

AR还在我的.suo文件中找到实例。由于问题似乎已修复,因此我没有删除该文件(不幸的是,您无法在NotePad中对其进行编辑)。

54

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

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

+3

感谢您的信息! – 2011-07-08 16:39:37

+8

+1伟大的解决方案!应该接受答案 – Seph 2012-06-21 10:53:22

3

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

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

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

2

刚刚修改的* .TT文件的属性如下面的图片,并立即生效。:

Default is empty