我正在創建一個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);
}
#>