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

参照しているアセンブリがビルドされていることを確認してください。奇妙に聞こえますが、T4 テンプレートは設計時に変換されます。つまり、参照しようとしているプロジェクトがビルドされていないか、以前にソリューションをクリーンアップしたことがある場合、"$(SolutionDir)\MvcTemplateApplication\bin\Debug\MvcTemplateApplication.Dll.

次に、MvcTemplateApplication.dll が古くなっている可能性があります。最後に成功したビルドを参照しているため、最後の変更が含まれていない可能性があります!

プロジェクトのクラスに基づいてコードを生成する場合は、Visual Studio Automation Code Model を使用することをお勧めします。この SO の質問に対する私の回答を参照してください: Design Time Reflection

于 2013-03-01T07:59:18.903 に答える
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 に答える