在上一篇文章了提到了在T4中引用assembly
发布之后觉得之提到了很粗略的大概, 为此又去查阅了一些文档,在这篇文章中,要对t4解析assembly做一个详解
ps,主要针对第三方的lib,system的就略过不提了
在t4中使用assembly tag后,编译器会按照如下顺序查找
1. 指定路径
如果在tag中清楚的写明了路径, 如
<#@ assembly name=“C:\T4Project\bin\Debug\TestLib.dll” #>
那编译器就会直接去到指定的路径去load该dll
2.GAC
如果tag中没有指明具体路径,那T4的编译器就会先去GAC查找, 当然, 找到的前提是该assembly是strong name的
<#@ assembly name=“TestLib.dll, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089” #>
3.项目的引用
如果编译器没在GAC中找到指定的assembly,则会接着去T4文件所在项目的references的assembly中查找
<#@ assembly name=“TestLib.dll” #>
4.项目的属性
最后, 编译器会检查T4文件所在项目的Reference Paths属性,尝试在这些path中找到指定的assembly
如果上述四个情况都不满足, 那就会产生Metadata file could not be found 的错误信息
知道了这些规则,我们就可以因地制宜的选择引入assembly的方式