c# - 如何为 T4 生成的代码设置默认命名空间

标签 c# .net namespaces t4

因此,我将 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/

相关文章:

c# - 在 C# 中调用 PowerShell 脚本非常耗时

c# - MethodInfo 在 C# 中调用重载方法

c# - 我可以使用大括号初始化 BCL 不可变集合吗?

c# - 有没有办法设置 gridview Xtragrid 的垂直滚动位置?

c# - 异步套接字-与C#中的永久套接字的双工通信

ruby - 为什么在尝试引用 Ruby 中的嵌套类时会出错?

c# - 如何在 C# 中的 GridView 中隐藏页脚行

.net - (TTFB) 某些特定请求花费的时间比执行实际请求的时间长

c++ - 在 C++ 中实现没有类的命名空间

Php Carbon 使用 Carbon\Carbon