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

я боролся с

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

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

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

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

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


person MemeDeveloper    schedule 14.07.2011    source источник


Ответы (1)


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

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

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


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

    ‹#@ template language="C#" debug="true" hostspecific="true"#>

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

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

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

    и :

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

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

    ..\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\Templates\Includes

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

    ‹#@ import namespace="EnvDTE" #>

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

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

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

    ‹#@ import namespace="EnvDTE" #>


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

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

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

person MemeDeveloper    schedule 16.07.2011
comment
Что вы имеете в виду, вы открыли %Temp% Я тоже пытаюсь понять это и использовать EnvDTE, но я все еще немного новичок в шаблонах и материалах EnvDTE в целом. - person William; 03.04.2013
comment
то есть начните › введите %temp%, который является ярлыком для открытия чего-то вроде C:\Users[YourUserName]\AppData\Local\Temp — удачи! - person MemeDeveloper; 18.11.2013