0

t4テンプレートを作成していて、テンプレート内でnhibernateを初期化しようとしています。t4の実行中に、次のエラーが発生します。

ファイルまたはアセンブリ'Network.Framework.Entities'またはその依存関係の1つを読み込めませんでした。システムは、指定されたファイルを見つけることができません。

エラーの意味は理解していますが、このファイルをt4ランタイムに提供して見つけられるようにする方法がわかりません。このファイルをアセンブリおよびインポートとして追加しました。dllファイルをVSpublicassemblyディレクトリ、t4 tempディレクトリ、およびテンプレートと同じディレクトリにドロップしました。何も機能しません。

および融合ログ:

アセンブリマネージャーの読み込み元:C:\ WINNT \ Microsoft.NET \ Framework \ v4.0.30319 \ clr.dll実行可能ファイルC:\ program files \ Microsoft Visual Studio 10.0 \ Common7 \ IDE\devenv.exeで実行

---詳細なエラーログが続きます。

===事前バインド状態情報===

ログ:ユーザー=自分

ログ:DisplayName = Network.Framework.Entities(Partial)

WRN:部分的なバインディング情報がアセンブリに提供されました:

WRN:アセンブリ名:Network.Framework.Entities | ドメインID:77

WRN:アセンブリの表示名の一部のみが指定されている場合、部分的なバインドが発生します。

WRN:これにより、バインダーが誤ったアセンブリをロードする可能性があります。

WRN:アセンブリに完全に指定されたテキストIDを提供することをお勧めします。

WRN:単純な名前、バージョン、カルチャ、および公開鍵トークンで構成されます。

WRN:この問題の詳細と一般的な解決策については、ホワイトペーパーhttp://go.microsoft.com/fwlink/?LinkId=109270を参照してください。

ログ:Appbase = file:/// C:/ program files / Microsoft Visual Studio 10.0 / Common7 / IDE /

ログ:初期PrivatePath = NULL

アセンブリの呼び出し:NHibernate、Version = 3.3.0.4000、Culture = neutral、PublicKeyToken=aa95f207798dfdb4。

===

ログ:このバインドは、LoadFromロードコンテキストで開始されます。WRN:ネイティブイメージはLoadFromコンテキストでプローブされません。ネイティブイメージは、Assembly.Load()のように、デフォルトのロードコンテキストでのみプローブされます。

ログ:アプリケーション構成ファイルの使用:C:\ program files \ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ devenv.exe.Config

ログ:ホスト構成ファイルの使用:

ログ:C:\ WINNT \ Microsoft.NET \ Framework \ v4.0.30319 \ config\machine.configのマシン構成ファイルを使用しています。

ログ:現時点では、ポリシーは参照に適用されていません(プライベート、カスタム、部分的、またはロケーションベースのアセンブリバインド)。

ログ:同じバインドが以前に見られ、hr=0x80070002で失敗しました。

これが私のテンプレートです:

<#@ template language="C#v4.0" hostspecific="True" debug="True" #>
<#@ output extension=".cs" #>
<#@ assembly name="mscorlib.dll" #>
<#@ assembly name="System.Xml.dll" #>
<#@ assembly name="System.Configuration.dll" #>
<#@ assembly name="EnvDTE.dll" #>
<#@ assembly name="$(SolutionDir)SharedDLLs\NHibernate.dll" #>
<#@ assembly name="$(SolutionDir)SharedDLLs\nunit.core.dll" #>
<#@ assembly name="$(SolutionDir)SharedDLLs\nunit.framework.dll" #>
<#@ assembly name="$(SolutionDir)SharedDLLs\NHibernate.Mapping.Attributes.dll" #>
<#@ assembly name="$(SolutionDir)SharedDLLs\Iesi.Collections.dll" #>
<#@ assembly name="$(SolutionDir)Network.Framework.Entities.Data\bin\Debug\Network.Framework.Entities.Data.dll" #>
<#@ assembly name="$(SolutionDir)Network.Framework.Entities\bin\Debug\Network.Framework.Entities.dll" #>
<#@ import namespace="System.Diagnostics" #>
<#@ import namespace="System.Configuration" #>
<#@ import namespace="System.Reflection" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="Network.Framework.Entities.Data.BL" #>
<#@ import namespace="Network.Framework.Entities" #>
<#@ import namespace="NHibernate" #>
<#@ import namespace="NHibernate.Cfg" #>
<#@ import namespace="NHibernate.Mapping.Attributes" #>
<#@ import namespace="EnvDTE" #>
<#@ import namespace="Network.Framework.Entities.DAL" #>
<#@ import namespace="System.Xml" #>
<#
    System.Diagnostics.Debugger.Launch();
    string path = Host.ResolvePath(@"..\Network.Framework.Entities\NHibernate.MSSQL.Config.xml");
    T4DataAccess<ReferenceValue> dal = CreateDataAccess<ReferenceValue>(path);
    ReferenceValueBL bl = new ReferenceValueBL(dal);
#>
using System;
namespace Network.Framework.Entities
{
    public class ReferenceValueKey
    {
        <#
            List<ReferenceValue> refVals = bl.Select();
            foreach(ReferenceValue rv in refVals)
            {
                Write("Public ");
                Write(rv.ReferenceValueCode.GetType().Name);
                Write(" ");
                Write(rv.ReferenceValueCode);
                Write(" = ");
                Write(rv.ReferenceValueCode);
            }
        #>
    }
}
<#+ 
    public ISessionFactory GetDBSession(string nHibernateConfigPath)
    {
        NHibernate.Cfg.Configuration cfg = new NHibernate.Cfg.Configuration().Configure(nHibernateConfigPath);
        var assembly = System.Reflection.Assembly.GetAssembly(typeof(Network.Framework.Entities.PlanCode));
        var serializedAssembly = HbmSerializer.Default.Serialize(assembly);
        cfg.AddInputStream(serializedAssembly);
        return cfg.BuildSessionFactory();
    }
    public T4DataAccess<T> CreateDataAccess<T>(string nHibernateConfigPath) where T : class
    {
        ISessionFactory db = GetDBSession(nHibernateConfigPath);
        return new T4DataAccess<T>(db);
    }
#>
4

1 に答える 1

0

これを app.config に追加します

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="NHibernate" culture="neutral" publicKeyToken="aa95f207798dfdb4" />
        <bindingRedirect newVersion="3.3.1.4000" oldVersion="0.0.0.0-3.3.0.4000" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
于 2012-08-17T12:57:16.913 に答える