如何为T4生成的代码设置默认名称空间

问题描述 投票:0回答:1

因此,我将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的这种行为更改为其他行为?

c# .net namespaces t4
1个回答
0
投票
以下内容对我来说很好:

<#@ 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. }

© www.soinside.com 2019 - 2024. All rights reserved.