因此,我将T4模板存储在ProjectRoot / Data文件夹中,并且每次重新构建项目时,该模板也会重新构建,因此VS会自动将生成的类的名称空间设置为ProjectName.Data,但所有其他类它们存储在名称空间ProjectName中,所以这会引起问题,因为我不想每次重建项目或模板时都更改此名称空间,尤其是如果我将与他人共享此项目时,是否有任何功能可以为生成的内容设置名称空间T4代码本身内部的代码?
编辑
这是此问题的最小生殖示例:
File Output.tt,位于ProjectRoot / Data中
<#@ template language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="GLGenerator" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Linq" #>
// Some other code
<#+
// Public constructor & class properties here
#>
然后基于此.tt文件的自动生成的类如下所示:
namespace <ProjectRoot>.Data
{
using GLGenerator;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using System;
public partial class OutputEnums : OutputEnumsBase
{
public virtual string TransformText()
{
// Auto-generated template code
}
// Class properties & constructor
}
// Other auto-generated code.
}
并且您会看到,VS会自动将该类的名称空间设置为ProjectName.Data,这对我来说是不利的,因为我希望将所有类都放在一个名称空间中,以使大多数此类在该名称空间内部。因此,有没有办法将VS的这种行为更改为其他行为?
<#@ template language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Linq" #>
namespace MyNamespace
{
public partial class OutputEnums
{
public virtual string TransformText()
{
// Auto-generated template code
<#
#>
return "";
}
// Class properties & constructor
}
// Other auto-generated code.
}
它产生-如预期的那样-
namespace MyNamespace { public partial class OutputEnums { public virtual string TransformText() { // Auto-generated template code return ""; } // Class properties & constructor } // Other auto-generated code. }