2013-02-28 51 views
0

在我的文本模板我聲明瞭我的文字模板如下如何將大會在asp.net MVC應用程序中的T4模板

<#@ template debug="false" hostspecific="true" language="C#" #> 
<#@ output extension=".cshtml" #> 

<#@ assembly name="System.Data.Entity" #> 
<#@ assembly name="System.Core" #> 

<#@ import namespace="System.Linq" #> 
<#@ import namespace="System.Collections.ObjectModel" #> 
    <#@ assembly name="$(SolutionDir)\MvcTemplateApplication\bin\Debug\MvcTemplateApplication.Dll" #> 
<#@import namespace="MvcTemplateApplication"#> 

在它上面給出了以下錯誤

Metadata file could not be found  

如何在上面的文本模板中包含應用程序的項目dll?

請幫我

回答

0

我不是100%肯定這是否需要做的事情,但我們對這個問題也掙扎,並以下區別我可以看到:

我們不混合assembly - 和import -Tags,所以我們總是有一組裝配標籤,然後是導入標籤。像這樣:

<#@ output extension="gevasys.generated.cs" #> 
<#@ Assembly Name="System.Core.dll" #> 
<#@ Assembly name="System.Data.Linq.dll" #> 
<#@ Assembly name="$(TargetPath)"#> // our own assembly 
<#@ import namespace="System" #> 
<#@ import namespace="System.IO" #> 
<#@ import namespace="System.Diagnostics" #> 

其次,我們不導入我們自己的DLL-名稱空間,而是引用這個類在它前面的完整名稱空間。像這樣:

var xy = new Company.NS1.NS2.MyOwnClass(); 

也許這也可以幫助你。

0

確保您所引用的組件已經建好。聽起來很奇怪,但T4模板在設計時被轉換。這意味着,如果您正在嘗試引用的項目尚未建立,或者您之前已經清理過解決方案,則「$(SolutionDir)\ MvcTemplateApplication \ bin \ Debug \ MvcTemplateApplication.Dll中沒有.dll。

其次,MvcTemplateApplication.dll可能已過時!您引用了上次成功構建,其中可能不包含上次更改!

如果您希望根據項目類生成代碼,我建議您使用Visual Studio Automation Code Model。查看我對此SO問題的回答:Design Time Reflection

相關問題