T4 «Преобразование компиляции: сборка с таким же идентификатором» уже импортирована. Попробуйте удалить одну из повторяющихся ссылок. »? - PullRequest
2 голосов
/ 15 июля 2011

Я боролся с

Преобразование компиляции: сборка с таким же именем «xxxx» уже импортирована. Попробуйте удалить одну из повторяющихся ссылок.

При использовании T4 для генерации некоторого кода во время разработки - с парой различных повторно используемых шаблонов, сохраненных в виде файлов .ttinclude и совместно используемых в нескольких различных «родительских» шаблонах.

Я переключаюсь между этим и альтернативным вариантом, когда удаляю одну из ссылок (в моем собственном файле ttinclude), а именно:

Преобразование компиляции: не удалось найти имя типа или пространства имен 'yyy' (отсутствует директива using или ссылка на сборку?)

Ходить кругами, есть идеи?

1 Ответ

5 голосов
/ 16 июля 2011

Ну, нашел грязный обходной путь.

Хотелось бы получить лучшее решение / подход, если у кого-то есть совет?

Публикация моего процесса, которая может быть полезна кому-то еще.


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

    <# @ template language = "C #" <strong>debug = "true" hostspecific = "true" #>

  2. Открыл% TEMP%, чтобы посмотреть на сгенерированные файлы изменено) сразу после получения ошибки преобразования компиляции.

  3. Произведен поиск отсутствующей / дублированной сборки / используемых классов. Найдено, что оба «включенных» шаблона имеют одинаковую ссылку, например

    <# @ include file = "MyHelperTemplate.ttinclude" #>

    и:

    <# @ include file = "EF.Utility.CS.ttinclude" #>

  4. Открыл папку включения для нестандартного включения, которое было вызывая конфликт с моим собственным

    .. \ Common7 \ IDE \ Extensions \ Microsoft \ Инструменты Entity Framework \ Шаблоны \ Включает

  5. Открыл этот файл, удалил хлопотный импорт

    <# @ import namespace = "EnvDTE" #>

  6. Сохранено с новым именем в той же папке и обновленными ссылками, указывающими на эту новую версию, например

    <# @ include file = "EF.Utility.CS.Custom.ttinclude" #>

  7. Поместите требуемый импорт в «родительские» шаблоны и удалите из шаблон «включить». В моем случае это было:

    <# @ import namespace = "EnvDTE" #>


Теперь все работает нормально, никаких проблем нет, нет дублированного импорта и все необходимые сборки ссылаются правильно.

Я уверен, что есть гораздо более изощренный способ справиться с повторным использованием кода T4, который полностью снимает эту проблему. Сначала я попытался импортировать свою собственную пользовательскую сборку с помощниками для шаблонов, но у меня возникла классическая проблема с заблокированными библиотеками, когда я затем попытался создать собственную библиотеку классов.

Кажется T4 Toolbox имеет решение этой проблемы с пользовательской директивой VolatileAssembly , и популярно, но выглядит немного излишним для моих довольно простых потребностей. Может быть, когда у меня будет больше времени.

...