При компиляции шаблоны должны быть созданы экземплярами , прежде чем их компилировать в объектный код. Это создание может быть достигнуто только в том случае, если известны аргументы шаблона. Теперь представьте сценарий, в котором функция шаблона объявлена в a.h
, определенная в a.cpp
и используемая в b.cpp
. Когда компилируется a.cpp
, не обязательно известно, что для предстоящей компиляции b.cpp
потребуется экземпляр шаблона, не говоря уже об этом конкретном экземпляре.
Можно утверждать, что компиляторы можно сделать умнее, чтобы «смотреть вперед» для всех применений шаблона, но я уверен, что это было бы нелегко создавать рекурсивные или другие сложные сценарии. AFAIK, компиляторы этого не делают. Как заметил Антон, некоторые компиляторы поддерживают явные декларации экспорта экземпляров шаблонов, но не все компиляторы поддерживают его (пока?).
Между атрибутом и знаком равенства есть пробел.
Это
<input type="hidden" asp-for="DetailId" asp-line ="DetailId"/>
должно выглядеть так
<input type="hidden" asp-for="DetailId" asp-line="DetailId"/>
Мне удалось решить эту проблему, сопоставив имя HtmlTargetElement и имя класса TagHelper. Мне просто нужно было заменить CustomTageHelper
на inputTagHelper
, что на самом деле было названием HtmlTargetElement.