T4 Generation: где VsNamespaceSuggestion() извлекает из?

Знает ли кто-нибудь в файле .tt, где code.VsNamespaceSuggestion() получает свое пространство имен?

У меня возникла проблема, когда мне пришлось изменить пространство имен решений, и я клянусь, что повсюду меняю его (имена папок, имена файлов, имена проектов, свойства проекта, сведения об сборке и т.д.). Но когда запускается файл .tt, он всегда ставит прежнее пространство имен в свои сгенерированные классы. Мне говорят, что это происходит из модели EF, но я ничего не вижу там, где показано пространство имен (либо в дизайнере/свойствах, либо при открытии файла .edmx в NotePad).

Любые мысли? Для взлома я просто переопределяю его в следующей строке с пространством имен, которое я хочу:

string namespaceName = code.VsNamespaceSuggestion();
namespaceName = "Desired.Namespace"; //HACK:

Ответ 1

У меня была эта точная проблема, и решение, которое я обнаружил, здесь не упоминалось, поэтому я подумал, что помогу любому, кто попал в эту статью в поиске.

Нажмите на файл генерации кода *.tt, который генерирует ваши сущности. В области свойств установите пространство имен пользовательских инструментов в пространство имен, которое вы хотели бы сгенерировать. Mine был пустым, поэтому T4 генерировал пространство имен из иерархии имен проектов по умолчанию +.

Ответ 2

Хост T4 в Visual Studio извлекает это из пакета свойств CallContext, используя имя "NamespaceHint".

Это значение заполняется стандартным механизмом настраиваемого инструмента T4 (SingleFileGenerator), используя пространство имен по умолчанию, указанное для настраиваемого инструмента, которое либо получено из пространства имен по умолчанию проекта, либо путь от корня проекта к файлу tt или явно указанный в сетке свойств ниже спецификации пользовательского инструмента (как говорит @mattkab в своем ответе)

Если вы используете сервис T4 из кода, вы можете заполнить его, самостоятельно настроив CallContext.

Ответ 3

Просто измените свойства файлов *.tt как следующее изображение и вступайте в силу немедленно.:

По умолчанию пусто

Ответ 4

Я думаю, что исправил проблему. Я повторно проверил все пространства имен проектов по умолчанию после комментария sra только для того, чтобы убедиться, но все было действительно правильно.

"Найти все в файлах" ничего не получилось. Я использовал небольшой бесплатный инструмент под названием Agent Ransack и нашел файл .csproj с тегом с именем , в котором было старое пространство имен. Я изменил это, и это исправило его.

AR также обнаружила старое пространство имен в связке файлов bin/Debug (abosluteFileList и файлы кеша). Я удалил все эти файлы, чтобы они были восстановлены с новым пространством имен. Я не знаю, было ли это какое-то влияние.

AR также обнаружил экземпляры в моем файле .suo. Поскольку проблема кажется исправленной, я не удалял этот файл (к сожалению, вы не можете его редактировать в NotePad).