2012-07-31 68 views
0

我正在創建一個t4模板並嘗試在模板中初始化nhibernate。在t4運行期間,出現錯誤:Nhibernate找不到指定的文件

無法加載文件或程序集「Network.Framework.Entities」或其某個依賴項。該系統找不到指定的文件。

我明白錯誤的含義,但我不知道如何將這個文件提供給t4運行時,以便它能夠找到它。我已經將該文件添加爲程序集並作爲導入。我已經在VS公共程序集目錄,t4 temp目錄以及與模板相同的目錄中刪除了dll文件。什麼都沒有

和融合日誌:

大會經理從裝:C:\ WINNT \ Microsoft.NET \框架\ v4.0.30319 \ clr.dll 下可執行的C運行:\ Program Files文件\微軟的Visual Studio 10.0 \ Common7 \ IDE \ devenv.exe

---詳細的錯誤日誌如下。

===預綁定狀態信息===

LOG:用戶=自己

LOG:DisplayName的= Network.Framework.Entities (部分)

WRN:部分的綁定信息被提供用於組裝:

WRN:程序集名稱:Network.Framework.Entities |域ID:77

WRN:部分綁定發生在僅提供部分程序集顯示名稱時。

警告:這可能會導致活頁夾加載不正確的組件。

警告:建議爲大會完全指定的文字標識,

警告:一個由簡單的名稱,版本,區域性和公鑰標記。

警告:有關此問題的更多信息和常見解決方法,請參閱白皮書http://go.microsoft.com/fwlink/?LinkId=109270

LOG:應用平臺=文件:/// C:/程序文件/微軟的Visual Studio 10.0/Common7/IDE/

LOG:初始PrivatePath = NULL

調用匯編:NHibernate的,版本= 3.3 .0.4000,Culture = neutral,PublicKeyToken = aa95f207798dfdb4。

===

LOG:此綁定在LoadFrom加載上下文中開始。 WRN:在LoadFrom上下文中不會探測本地圖像。本機圖像只會在默認加載上下文中進行探測,就像使用Assembly.Load()一樣。日誌:使用應用程序配置文件:C:\ program files \ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ devenv.exe。配置

LOG:使用主機配置文件:

日誌:從C使用計算機配置文件:\ WINNT \ Microsoft.NET \框架\ v4.0.30319 \ CONFIG \ 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> 
相關問題