C# T4代:VsNamespaceSuggestion()从何而来?

C# T4代:VsNamespaceSuggestion()从何而来?,c#,entity-framework,code-generation,t4,C#,Entity Framework,Code Generation,T4,有人知道在.tt文件中,code.vsnamespacessuggestion()的命名空间是从哪里来的吗 我遇到了一个问题,我必须更改解决方案的名称空间,我发誓我在任何地方都更改了它(文件夹名称、文件名、项目名称、项目属性、程序集信息等)。但是当.tt文件运行时,它总是将旧名称空间放回其生成的类中。我被告知它来自EF模型,但我在其中没有看到任何显示名称空间的内容(无论是在设计器/属性中还是在记事本中打开.edmx文件) 有什么想法吗?对于黑客,我只是在下一行用我想要的名称空间覆盖它: stri

有人知道在.tt文件中,code.vsnamespacessuggestion()的命名空间是从哪里来的吗

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

有什么想法吗?对于黑客,我只是在下一行用我想要的名称空间覆盖它:

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

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

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

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


AR还在my.suo文件中找到了实例。由于问题似乎已经解决,我没有删除该文件(不幸的是,您不能在记事本中编辑它)。

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


单击生成实体的代码生成*.tt文件。在“属性”窗格中,将自定义工具命名空间设置为要生成的命名空间。我的是空的,因此T4正在从默认项目名称空间+文件夹继承人权限生成名称空间。

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

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


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

只需修改*.tt文件的属性,如下图所示,并立即生效: