在T4中自动获取所有程序集引用

时间:2011-01-25 18:00:43

标签: .net t4

是否可以使用T4模板自动获取父项目的所有程序集引用(及其依赖项)?

我见过的所有例子都使用<#@ assembly#>或<#@ VolatileAssembly#>手动定义引用,例如我最终必须在项目和模板中引用System.Core。我想避免这种重复:我只想在项目中定义引用,而不是模板。

这也应该添加对项目本身的引用,允许在模板中引用其他程序集,并在必要时进行卷影复制以避免程序集锁定。

似乎this was possible before VS2010,是否可以重新实施/恢复该行为?

1 个答案:

答案 0 :(得分:1)

T4确实在VS2010之前获得了项目依赖项。我们故意选择从运行时引用中分离出设计时引用,以便将这些问题与使用.Net 4.0的模板分开,即使它们被用于生成.Net 2.0项目的代码。

您可以通过制作一个自定义指令处理器来执行类似于VS2010之前的操作,该处理器使用Host作为ServiceProvider来获取DTE,然后走过解决方案/项目以找到它们的引用。但这将是相当多的工作。

我很想知道项目的依赖关系与模板所需的依赖关系的关系。例如,使用WinForms的项目通常不需要在其模板代码中使用WinForms。像System.Core这样的基础知识通常都在两者中,但是这个共享集通常看起来并不大,所以重复并不是一个重大问题。

你有一个大的共享集吗?