2010-08-08 1 views
1

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

Вспомогательный метод:

namespace PocoGenerator 
{ 
    public class EntityReflector 
    { 
     public static IEnumerable<PropertyInfo> GetPropertiesForTemplate() 
     { 
      var baseNameSpace = ""; 
      var assemblyName = "DataObjects"; 

непокорных код шаблона:

<# foreach(PropertyInfo prop in PocoGenerator.EntityReflector.GetPropertiesForTemplate()) { #> 
public <#= prop.PropertyType #> <#= prop.Name #> {get; set; } 
<# } #> 

ответ

1

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

До тех пор, пока вы используете VS2010 SP1, вы не найдете никаких проблем с блокировкой сборки.

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

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