因此,我将 f T4 模板存储在文件夹 ProjectRoot/Data 中,每次重建我的项目时,该模板也会重建,因此 VS 会自动将生成的类的命名空间设置为 ProjectName.Data,但我的所有其他类都被存储在命名空间 ProjectName 中,所以这会产生问题,因为我不想在每次重建项目或模板时更改此命名空间,特别是如果我将与其他人共享此项目,那么是否有任何功能可以为内部生成的代码设置命名空间T4代码本身?
编辑
这是此问题的最小再生示例:
文件 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.
}
关于c# - 如何为 T4 生成的代码设置默认命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62085018/