Например, я хочу сгенерировать шаблон в сборке Mall.T4, отразив объекты в сборке Mall.Data.Но я встретил Систему.IO.FileNotFoundException: не удалось загрузить файл или сборку 'Microsoft.EntityFrameworkCore.Реляционный, Версия = 2.2.3.0, Культура = нейтральный, PublicKeyToken = adb9793829ddae60 "или одна из его зависимостей. Указанный файл не найден. Имя файла:" Microsoft.EntityFrameworkCore.Реляционный, Версия = 2.2.3.0, Культура = нейтральный, PublicKeyToken = adb9793829ddae60 "проблема
Я пытался присоединиться к Microsoft в текущей сборке. EntityFrameworkCore. Реляционный. DLL и ссылки в шаблоне T4. Но это не такработа.
<#@ template language="C#" debug="True" #>
<#@ output extension="txt" #>
<#@ assembly name="System.Core" #>
<#@ assembly name="EnvDTE" #>
<#@ assembly name="$(TargetDir)Microsoft.EntityFrameworkCore.dll" #>
<#@ assembly name="$(TargetDir)Microsoft.EntityFrameworkCore.Relational.dll" #>
<#@ assembly name="$(TargetDir)Mall.Component.dll" #>
<#@ assembly name="$(TargetDir)Mall.Data.dll" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Reflection" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="Mall.Component.UnitOfWork" #>
<#@ import namespace="Mall.Data.AccountData" #>
<#@ include file="T4Toolbox.tt" #>
<#@ include file="ServiceTemplate.tt" #>
<#@ include file="IServiceTemplate.tt" #>
<#@ include file="RepositoryTemplate.tt" #>
<#@ include file="IRepositoryTemplate.tt" #>
<#
string curPath = Path.GetDirectoryName(Host.TemplateFile);
string destPath = Path.Combine(curPath, "CodeFiles");
if(!Directory.Exists(destPath))
{
Directory.CreateDirectory(destPath);
}
try
{
var assemblyEntity = typeof(Mall).Assembly;
var assemblyEntityTypesInfo = assemblyEntity.DefinedTypes.Where(m => m.BaseType == typeof(DataBase)).ToList();
foreach (var typeInfo in assemblyEntityTypesInfo)
{
var moduleName=typeInfo.Namespace.Split('.').LastOrDefault();//文件名前缀
var modelName=moduleName.Substring(0, moduleName.Length - 4) + "Context";//数据库仓储名
var tableName=typeInfo.Name;//数据库表名
//IRepository生成
CSharpTemplate template = new IRepositoryTemplate(moduleName,modelName,tableName);
string fileName = string.Format(@"{0}\{2}Repository\{1}.cs", destPath, "I"+tableName+"Repository", moduleName);
template.Output.Encoding = Encoding.UTF8;
template.RenderToFile(fileName);
//Repository生成
template = new RepositoryTemplate(moduleName,modelName,tableName);
fileName = string.Format(@"{0}\{2}Repository\Impl\{1}.cs", destPath, tableName+"Repository", moduleName);
template.Output.Encoding = Encoding.UTF8;
template.RenderToFile(fileName);
//IService生成
template = new IServiceTemplate(moduleName, tableName);
fileName = string.Format(@"{0}\{2}Service\{1}.cs", destPath, "I"+tableName+"Service", moduleName);
template.Output.Encoding = Encoding.UTF8;
template.RenderToFile(fileName);
//Service生成
template = new ServiceTemplate(moduleName, tableName);
fileName = string.Format(@"{0}\{2}Service\Impl\{1}.cs", destPath, tableName+"Service", moduleName);
template.Output.Encoding = Encoding.UTF8;
template.RenderToFile(fileName);
}
}
catch(ReflectionTypeLoadException ex)
{
foreach(var exception in ex.LoaderExceptions)
{ #>
<#=exception#>
<#}
}
#>