0

在我的文本模板中,我声明我的文本模板如下

<#@ 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?

请帮我

4

2 回答 2

0

我不是 100% 确定是否需要这样做,但我们也一直在努力解决这个问题,我可以看到以下差异:

我们不混合assembly- 和 -import标签,所以我们总是有一组程序集标签,然后是导入标签。像这样:

<#@ 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( );

也许这也可以帮助你。

于 2013-02-28T12:11:20.667 回答
0

确保您引用的程序集已构建。听起来很奇怪,但 T4 模板在设计时进行了转换。这意味着,如果您尝试引用的项目尚未构建或您之前已清理过解决方案,则“$(SolutionDir)\MvcTemplateApplication\bin\Debug\MvcTemplateApplication.Dll 中没有 .dll。

其次,MvcTemplateApplication.dll 可能已经过时了!您正在引用最后一次成功的构建,其中可能不包括最后的更改!

如果您想根据项目的类生成代码,我建议您使用 Visual Studio 自动化代码模型。请参阅我对这个 SO 问题的回答:Design Time Reflection

于 2013-03-01T07:59:18.903 回答