Как установить пространство имен по умолчанию для кода, сгенерированного T4 - PullRequest
0 голосов
/ 29 мая 2020

Итак, у меня есть шаблон f T4, хранящийся в папке ProjectRoot / Data, и каждый раз, когда я перестраиваю свой проект, этот шаблон также перестраивается, и поэтому VS автоматически устанавливает пространство имен для сгенерированного класса в ProjectName.Data, но все остальные мои классы хранятся в пространстве имен ProjectName, поэтому это создает проблему, потому что я не хочу изменять это пространство имен каждый раз, когда я перестраиваю проект или шаблон, особенно если я поделюсь этим проектом с другими, поэтому есть ли какие-либо функции для установки пространства имен для сгенерированный код внутри самого кода T4?

EDIT

Вот минимальный репродуктивный пример этой проблемы:

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, что плохо для меня, поскольку я хочу, чтобы все мои классы были в одном пространстве имен, чтобы сделать большинство из них int ernal для этого пространства имен. Итак, есть ли способ изменить это поведение VS на что-то другое?

1 Ответ

0 голосов
/ 30 мая 2020

У меня отлично работает следующее:

<#@ 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.        
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...