2009-04-30 85 views
1

我有一個定義一個類燦T4模板使用相同的庫

namespace ClassLibrary1 
{ 
    public class Class1 
    { 
     public static readonly int Rate = 5; 
    } 
} 

同樣的lib我添加了一個TT文件庫

<#@ template debug="false" hostspecific="false" language="C#" #> 
<#@ output extension=".cs" #> 
<#@ import namespace="ClassLibrary1" #> 
<#@ assembly name="ClassLibrary.dll" #> 

enum MilkRate{ Walmart=<#= Class1.Rate #>} 

我得到錯誤「編譯轉型:元數據文件'ClassLibrary.dll'找不到d:\ documents \ visual studio 10 \ Projects \ ConsoleApplication2 \ ClassLibrary1 \ TextTemplate1.tt「

如何解決這個問題?

[發生在2010 VS,VS2008]

+0

什麼是tt文件? – CSharper 2009-04-30 14:41:10

回答

1

我不知道這是可能的。

我認爲我可能遇到的問題是:您的模板生成的代碼將改變它所引用的dll!

一兩件事你可以做的是有一個模板參考使用另一個模板:

<#@ include file="Helper.tt" #> 

這樣,你就可以在一箇中央模板定義Rate = 5和擁有一切參考這一點。你甚至可以建立一個模板來生成你的課堂,所以一切都在一箇中心位置。

我知道這並不直接回答你的問題,但我希望它有用。

1

你可以做到這一點,但這種「遞歸」式的工作需要注意。

在VS2010中,您可以在您的<#@ assembly#>指令中使用VS宏變量,$(SolutionDir),$(ProjectDir)和朋友,例如,

<#@集名稱= 「$(PROJECTDIR)$(OUTDIR)ClassLibrary.dll」 #>

如果再有一個開發者都從源頭控制乾淨,那麼他們就必須做建立之前他們可以做一個工作轉換。

如果他們先轉換,轉換將失敗,那麼他們的構建將失敗,他們將被卡住,不得不恢復文件。這沒什麼大不了的,但它可能會讓folsk跳起來。