当前位置:  开发笔记 > 开发工具 > 正文

无法在T4模板中引用装配

如何解决《无法在T4模板中引用装配》经验,为你挑选了2个好方法。

我在主程序集中的测试器类中有以下代码PocoGenerator.该程序集应该使用T4模板基于引用程序集(项目引用)中的L2S实体生成POCO DataObjects.

var assemblyName = "DataObjects";
var dataObjects = AppDomain.CurrentDomain.Load(new AssemblyName(assemblyName));

尽我所能,我不能让T4找到DataObjects程序集.我尝试了各种形式的assembly指令,例如:

<#@ assembly name="DataObjects" #>
<#@ assembly name="DataObjects, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" #>

无济于事.上面的代码在测试器类中工作,但不在模板中.我究竟做错了什么?

补充:我已经通过在机器人位置使用绝对路径来解决这个问题,我引用它,指令以及类功能块,即

<#@ assembly name="C:\Development\PocoGenerator\DataObjects\bin\Debug\DataObjects.dll" #>

var sourceAssembly = Assembly.LoadFile(@"C:\Development\PocoGenerator\DataObjects\bin\Debug\DataObjects.dll");

但我真的不喜欢这个,因为我想在各个项目中使用这个模板,而我只是简单地讨厌重复,特别是魔术字符串.



1> 小智..:
<#@ assembly name="$(ProjectDir)bin\Debug\ProofOfConcept.dll" #>

快乐的编码!


甚至更好:`<#@ assembly name ="$(ProjectDir)$(OutDir)$(TargetFileName)"#>`
最简单:`<#@ Assembly name ="$(TargetPath)"#>`
这不仅适用于项目已经建成的情况吗?我希望能够在构建项目之前使用引用的程序集生成代码.

2> Peter Stegna..:

要在VS2010中引用T4模板中的装配,您有一些选择:

    GAC您的程序集并使用命名空间参考或完全限定类型名称

    使用硬编码的完全合格的UNC路径

    将程序集复制到Visual Studio"公用程序集文件夹",并使用命名空间参考或完全限定类型名称.

    使用或定义Windows环境变量以构建完全限定的UNC路径.

    使用Visual Studio宏来构建完全限定的UNC路径.

我建议你在公共程序集文件夹中放置一个引用的程序集,另一个,甚至更好的解决方案是硬编码引用程序集的路径.

关于此主题的非常好的帖子:T4模板错误 - Assembly Directive无法在Visual Studio 2010项目中找到引用的程序集.

基本上MS决定制动改变,项目参考组件也不被T4引擎参考.

T4的装配集与包含项目的装配集完全分离,以避免在项目针对以前的框架版本时拾取错误的装配.项目程序集不再用于解析模板程序集指令.

更多内容:Visual Studio 2010中T4的新功能

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有