2012-06-18 42 views
9

我需要能夠使用T4模板中的類,它們都位於我的解決方案中。我在Container.cs有一個名爲Container的課程。在我的文本模板中,我希望能夠訪問Container類。關於我如何做到這一點的任何想法。基本上是這樣的:在T4模板中使用類

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

<# var container = new Container() #>

+0

請顯示您的代碼 –

回答

15

在一般情況下,如果你需要在你的模板實際使用的容器類的功能,你需要加載您的項目建設大會。這確實會引入一個循環依賴關係,因爲您需要爲您的程序集構建版本以重新生成將包含在該程序集中的代碼,因此請注意這一點。

如果你正在使用VS2010或以上,你就可以使用這樣的:

<#@ assembly name="$(TargetPath)" #> 
<#@ import namespace="Your.Namespace" #> 

然後用你的容器類。

如果您有VS2010SP1或更高版本,這會導致您沒有將該程序集鎖定在內存中的問題,但如果您早於此時間,則必須在每一代之後重新啓動Visual Studio,然後才能重新構建項目。

+2

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。 –

+0

謝謝你,這真的很棒。 – user1396149