VS 2010 (C#) T4 テンプレートを使用してコードを生成しています。
プロジェクト内のすべてのタイプを繰り返し処理し、エンティティ poco クラスを絞り込み、ラッパーを生成する必要があります。問題は、プロジェクトの名前空間が認識されていないことです。
ソリューションの構造は次のとおりです。
namespace MySolution.Entities
{
public class Employee { ... }
public class Department { ... }
}
// Seperate project referenceing MySolution.Entities.
namespace MySolution.Database
{
public partial class Context { ... }
// Should generate Context.cs as a partial class with after iterating Syste.Types available in MySolution.Entities.
Context.tt
}
テキストテンプレートは次のとおりです。
<#@ template language="C#" #>
<#@ Output Extension=".cs" #>
namespace MySolution.Database
{
public partial class Context:
System.Data.Entity.DbContext
{
<#
System.Type [] types = typeof(MySolution.Entities).Assembly.GetTypes();
for (int i=0; i < types.Count; i++)
#>
public <#= types[i].Name; #> <#= types[i].Name; #> { get; set; }
}
}
上記のコードはエラーを生成します: タイプまたは名前空間 'MySolution' が見つかりません。using ディレクティブまたはアセンブリ参照がありませんか? 次に、次のコード行を追加して、アセンブリを含めます。
<#@ Assembly Name="..\MySolution.Entities\bin\x86\Release\MySolution.Entities.dll" #>
今度は別のエラーが表示されます: アセンブリ参照 '..\..\..TrafficMonitor.Core\bin\x86\Release\TrafficMonitor.Library.dll' を解決しようとしているときに、ホストが例外をスローしました。変換は実行されません。次の例外がスローされました: System.IO.FileLoadException: 指定されたアセンブリ名またはコードベースが無効でした。(HRESULT からの例外: 0x80131047)
この制限を克服する方法についてのアイデアはありますか?