我正在创建一个t4模板并尝试在模板中初始化nhibernate。在t4运行时,我收到一个错误:
无法加载文件或程序集“Network.Framework.Entities”或其依赖项之一。系统找不到指定的文件。
我理解错误意味着什么,但我不知道如何将此文件提供给t4运行时以便它可以找到它。我已将此文件添加为程序集和导入。我已将dll文件放在VS公共程序集目录中,在t4临时目录中以及与模板相同的目录中。什么都行不通。
和融合日志:
程序集管理器从: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 (部分)
警告:为程序集提供了部分绑定信息:
警告:程序集名称:Network.Framework.Entities |域名ID:77
警告:当仅提供部分程序集显示名称时,会发生部分绑定。
警告:这可能导致活页夹加载错误的程序集。
警告:建议为程序集提供完全指定的文本标识
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加载上下文开始。 警告:不会在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);
}
#>
答案 0 :(得分: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>