2010-08-08 6 views
1

J'ai essayé de résoudre les problèmes de référence d'assemblage dans mon modèle T4 en déplaçant le code dans une méthode d'assistance dans le même assemblage et espace de noms que mon modèle, mais T4 refuse de trouve ma méthode d'aide.Impossible d'accéder à la méthode dans le même assemblage que mon modèle T4

La méthode d'assistance:

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

Le récalcitrant code du modèle:

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

Répondre

1

T4 ne compile dans le même contexte que votre code de projet, vous aurez donc besoin d'utiliser un assemblage directive pour charger la sortie de votre projet.

Tant que vous utilisez VS2010 SP1, vous ne trouverez aucun problème de verrouillage de l'assemblage.

Cependant, ce type de modèle récursif qui contribue à un assemblage qu'il aide ensuite à construire peut être fragile, car vous avez besoin d'une version du binaire pour amorcer une construction propre. Si possible, je déplacerais votre code d'assistance dans un assemblage d'assistance qui ne fait pas partie de votre projet fini, mais seulement une partie de votre jeu d'outils.