在T4模板中使用class

use*_*149 9 c# t4

我需要能够在T4模板中使用一个类,这两个类都驻留在我的解决方案中.我有一个名为类ContainerContainer.cs.在我的文本模板中,我希望能够访问Container类.关于我该怎么做的任何想法.基本上是这样的:

<#@ template language="C#" #>

<# var container = new Container() #>

Gar*_*thJ 15

通常,如果您需要在模板中实际使用Container类的功能,则需要加载项目正在构建的程序集.这确实引入了循环依赖,因为您需要构建版本的程序集才能重新生成将包含在该程序集中的代码,因此请注意这一点.

如果您使用的是VS2010或更高版本,您将可以使用以下内容:

<#@ assembly name="$(TargetPath)" #>
<#@ import namespace="Your.Namespace" #>
Run Code Online (Sandbox Code Playgroud)

然后使用您的Container类.

如果您有VS2010SP1或更高版本,这将导致您没有在内存中锁定该程序集的问题,但如果您早于此,那么您必须在每一代之后重新启动Visual Studio,然后才能重建项目.

  • T4模板中的另一个选项是[File.ReadAllBytes()](http://msdn.microsoft.com/en-us/library/system.io.file.readallbytes.aspx),然后是[Assembly.Load()] (http://msdn.microsoft.com/en-us/library/h538bck7.aspx)字节数组进入内存.这将需要填充限定类`new namespaces.class()`,但这意味着您不必每次都重新启动Visual Studio. (2认同)