2012-07-31 6 views
0

t4 템플릿을 만들고 템플릿 내에서 nhibernate를 초기화하려고합니다. t4 런타임 중에 오류가 발생합니다 :Nhibernate가 지정한 파일을 찾을 수 없습니다.

'Network.Framework.Entities'또는 그 종속성 중 하나를로드 할 수 없습니다. 시스템이 지정된 파일을 찾을 수 없습니다.

오류의 의미를 이해하지만이 파일을 t4 런타임에 제공하여 찾을 수있는 방법을 모르겠습니다. 이 파일을 어셈블리 및 가져 오기로 추가했습니다. dll 파일을 VS public assembly 디렉토리, t4 temp 디렉토리 및 템플릿과 같은 디렉토리에 놓았습니다. 아무것도 작동하지 않습니다.

과 융합 로그 :

조립 관리자에서로드 : C : \ 실행 C에서 실행 WINNT \ Microsoft.NET 프레임 워크 \ \ v4.0.30319 \ clr.dll 가 : \ 프로그램 파일 \ 마이크로 소프트 비주얼 스튜디오 10.0 \ Common7 \ IDE \ devenv.exe

--- 자세한 오류 로그는 다음과 같습니다.

=== 사전 바인드 상태 정보 ===

LOG : 사용자 = 자신

LOG : 표시 이름 = Network.Framework.Entities (부분)

WRN : 부분 바인딩 정보 어셈블리에 대해 제공되었습니다.

WRN : 어셈블리 이름 : Network.Framework.Entities | 도메인 ID : 77

WRN : 어셈블리 표시 이름의 일부만 제공되면 부분 바인드가 발생합니다.

WRN : 바인더가 잘못 삽입 될 수 있습니다.

WRN : 그것은, 어셈블리에 대한 완전 지정된 텍스트 ID를 제공하는 것이 좋습니다

WRN : 단순한 이름, 버전, 문화, 공개 키 토큰으로 구성되어 있습니다.

WRN :이 문제에 대한 추가 정보 및 일반적인 해결책은 백서 http://go.microsoft.com/fwlink/?LinkId=109270을 참조하십시오.

LOG : Appbase = 파일 : /// C :/프로그램 파일/마이크로 소프트 비주얼 스튜디오 10.0/Common7/IDE/

LOG : 초기 PrivatePath = NULL

호출 조립 : NHibernate에, 버전 = 3.3 .0.4000, 문화 = 중립, PublicKeyToken = aa95f207798dfdb4.

===

LOG :이 바인딩은 LoadFrom로드 컨텍스트에서 시작됩니다. WRN : LoadFrom 컨텍스트에서 네이티브 이미지가 검색되지 않습니다. 네이티브 이미지는 Assembly.Load()와 같이 기본로드 컨텍스트에서만 탐색됩니다.

로그 : 응용 프로그램 구성 파일 사용 : C : \ program files \ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ devenv.exe.구성

LOG : 사용 호스트 구성 파일 :

LOG : C에서 컴퓨터 구성 파일을 사용하여 : \ WINNT \ Microsoft.NET \ v4.0.30319 \ 설정 \ machine.config에 프레임 워크 \.

LOG : 정책이 현재 참조에 적용되지 않습니다 (개인, 사용자 정의, 부분 또는 위치 기반 어셈블리 바인드).

LOG : 동일한 바인딩이 이전에 표시되었으며 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); 
    } 
#> 

답변

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> 
관련 문제