Поколение T4: Откуда берется VsNamespaceSuggestion ()? - PullRequest
24 голосов
/ 10 мая 2011

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

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

Есть мысли? Для взлома я просто перезаписываю его в следующей строке желаемым пространством имен:

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

Ответы [ 4 ]

56 голосов
/ 16 июня 2011

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

3 голосов
/ 25 апреля 2012

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

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

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

2 голосов
/ 25 июля 2015

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

Default is empty

1 голос
/ 13 мая 2011

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

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

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

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

...