Ne peut pas faire référence à un assembly dans un modèle T4
J'ai le code suivant dans un testeur de classe dans mon assemblage principal, PocoGenerator
. Cette assemblée est censé utiliser un modèle T4 générer POCO est basé sur L2S entités référencées à l'assemblée un projet de référence), DataObjects
.
var assemblyName = "DataObjects";
var dataObjects = AppDomain.CurrentDomain.Load(new AssemblyName(assemblyName));
Essayez comme je peut, je ne peux pas obtenir T4 de trouver le DataObjects de l'assemblée. J'ai essayé diverses formes de assembly
directives, comme:
<#@ assembly name="DataObjects" #>
<#@ assembly name="DataObjects, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" #>
en vain. Le code ci-dessus fonctionne le testeur de classe, mais pas dans le modèle. Ce que je fais mal?
AJOUTÉ:
J'ai résolu ce problème en utilisant le chemin d'accès absolu à l'assemblée bot dans des endroits que je référence, la directive ainsi que la caractéristique de la classe bloc, c'est à dire
<#@ assembly name="C:\Development\PocoGenerator\DataObjects\bin\Debug\DataObjects.dll" #>
et
var sourceAssembly = Assembly.LoadFile(@"C:\Development\PocoGenerator\DataObjects\bin\Debug\DataObjects.dll");
Mais je n'aime vraiment pas, je voudrais utiliser ce modèle dans différents projets, et je viens de la plaine de la haine de la duplication, en particulier de la magie des cordes.
- Votre modèle de projet doit avoir une référence de projet pour le projet que vous avez une dépendance. Votre "assemblée" tag ci-dessus ressemble à droite. Et vous devriez également avoir une "importation" de référence ainsi. Ce message d'erreur exact êtes-vous? (et c'est quoi le domaine d'application des trucs? vous ne devriez pas avoir à faire quelque chose comme ça)
- Le domaine d'application les trucs de tp me permettent d'itérer tous les types dans l'une des assemblées chargées dans le courant de l'AppDomain. Il n'a rien à voir avec le référencement de l'assemblée pour le modèle lui-même.
- Oui, je vois maintenant. Et ce message d'erreur exact recevez-vous?
- veuillez voir mon dernier edit.
Vous devez vous connecter pour publier un commentaire.
Bon Codage!
<#@ assembly name="$(ProjectDir)$(OutDir)$(TargetFileName)" #>
<#@ Assembly name="$(TargetPath)" #>
À l'ensemble de référence dans le modèle T4 dans VS2010 vous avez quelques options:
Je voudrais vous suggérer de mettre un assembly référencé dans vos Assemblées Publiques Dossier, un autre, peut-être même la meilleure solution serait de coder en dur le chemin de vos assemblys référencés.
Très joli post sur ce sujet: Modèle T4 erreur de l'Assemblée Directive ne peut pas localiser assembly référencé dans le projet Visual Studio 2010.
Fondamentalement, MS a décidé de le le freinage changement, que le projet assemblys référencés ne sont pas référencés par T4 moteur, trop.
Plus sur cela: Quoi de neuf dans la T4 dans Visual Studio 2010
J'ai eu un problème similaire quand j'ai essayé d'inclure Moins de Css pour .NET dans mon projet Web.
J'ai fini avec la copie de l'assemblée dans le dossier racine de mon projet et de l'inclure comme une référence dans le projet lui-même. Ensuite, j'ai ajouté les lignes suivantes dans le .tt fichier:
Je suis sûr que quelque chose de similaire devrait travailler avec votre assemblée ainsi...
J'ai trouvé il ya un certain nombre de cas dans la création et l'utilisation de la gax boîte à outils et les packages où la construction est parfaitement heureux avec la façon dont les références sont structurés mais le runtime est tout gêné car il ne peut pas trouver ce qu'il cherche - cela se produit généralement lorsque l'assemblage principal fait référence à un assembly qui utilise gax éléments et alors que l'assemblée, à son tour, fait référence à une autre assemblée que le principal ne fonctionne pas.
essayer directement, y compris l'assemblée en question dans votre assemblage principal - et de considérer que vous pourriez avoir besoin d'écrire de post-construction instructions pour la déplacer vers un "attendue" emplacement - tout en un nusiance, il devrait battre avoir à brancher directement le chemin d'accès.
YMMV