47

Hi I need to add the assembly of an an existing project in my solution in my T4 Template file. The problem is that my T4 template is in a project called Project.WebApi and the class that I need in my T4 template is inside a project called Project.Common.WebApi.

I have tryed importing the namespace like this:

<#@ import namespace="Project.Common.WebApi.T4TemplateAttribute" #>

But I get this error:

The type or namespace name 'Project' could not be found (are you missing a using directive or an assembly reference?)

I have tryed adding the assembly like this:

<#@ assembly name="Project.Common.WebApi" #>

And I got this error:

Compiling transformation: Metadata file 'Project.Common.WebApi' could not be found

My project that contains the T4Template (Project.WebApi) has a reference to the Project.Common.WebApi but from what I read T4Template does not use the references in the projects.

How can I solve this issues?

4

4 に答える 4

79

T4 は、コードの残りの部分からほぼ完全に独立して動作します。ただし、ディレクティブを使用して正しい軌道に乗っていassemblyますが、アセンブリが GAC にない限り (おそらくそうではない)、アセンブリの実際の DLL へのフル パスを指定する必要があります。

ただし、幸いなことに、T4 ディレクティブで MSBuild マクロを使用できます。したがって、おそらく次のようなものが得られます

<#@ assembly name="$(SolutionDir)Project.Common.WebApi\bin\Debug\Project.Common.WebApi.dll" #>

この構文の背景については、MSDNを参照してください。

import namespaceディレクティブも必要です。

最後に、プロジェクトのビルド順序に注意してください。T4 テンプレートを含むプロジェクトは Project.Common.WebApi に依存するようになったため、Project.Common.WebApi が最初にビルドされていることを確認する必要があります。そうしないと、T4 テンプレートが誤って古いバージョンのアセンブリにリンクされ、バグの追跡が非常に難しくなる可能性があります。

プロジェクトへの参照が既にある場合はすべて完了ですが、それ以外の場合は、依存関係を正しく設定する必要があります。これは、[プロジェクトの依存関係...] ダイアログを使用して、Visual Studio で行うことができます。プロジェクトを右クリックして見つけます。

于 2013-06-06T13:02:22.283 に答える
28
<#@ assembly name="$(TargetPath)" #>

それと同じくらい簡単です。

于 2015-07-21T12:19:45.080 に答える
-1

C# を使用している場合に備えて、double slash \\.

次のようになると思います:

<#@ assembly name="$(SolutionDir)Project.Common.WebApi\\bin\\Debug\\Project.Common.WebApi.dll" #>
于 2014-12-19T00:06:16.660 に答える