Я пытаюсь динамически загрузить сборку в мой генератор T4. Я написал класс, который будет находить сборку в папке пакетов:
public static class DynamicModuleLoader
{
public const string VERSION_GROUP_IDENTIFIER = "version";
public const string DEFAULT_PACKAGE_LOCATION = "lib\\net45";
public static void LoadLatestFromNugetPackages(string packageRootDir, string[] assemblyNames /*, bool usePreRelease = false*/)
{
foreach (var assemblyName in assemblyNames)
{
//var internalPattern = usePreRelease ? @"[\d]+[.\w-]*" : @"[\d.]+\\";
var internalPattern = @"[\d]+[.\w-]*";
//We need this regex to filter out other assemblies with similar names, as well as to parse versions
var regexMatchPattern = $@"(?i){assemblyName}\.(?<{VERSION_GROUP_IDENTIFIER}>({internalPattern}))";
var regex = new Regex(regexMatchPattern, RegexOptions.Compiled);
var subDirectories = Directory.GetDirectories(packageRootDir, $"{assemblyName}.*")
.Where(subDir => regex.IsMatch(subDir));
var targetDir = subDirectories
.OrderByDescending(subDir => regex.Match(subDir).Groups[VERSION_GROUP_IDENTIFIER].Value)
.FirstOrDefault();
var assemblyFullPath = $"{Path.Combine(targetDir, DEFAULT_PACKAGE_LOCATION)}/{assemblyName}.dll";
Assembly.Load(assemblyFullPath);
}
}
}
В моем файле TT я пытаюсь динамически загрузить dll.
<#@ assembly name="System.Core" #>
<#@ assembly name="System.Xml" #>
<#@ import Namespace="System.Linq" #>
<#@ import Namespace="System.Collections.Generic" #>
<#@ import Namespace="System.IO" #>
<# DynamicModuleLoader.LoadLatestFromNugetPackages("$(SolutionDir)\\packages", new [] {"Services.Data" }); #>
<#@ import Namespace="Services.Data.Contracts" #>
<#@ import Namespace="Services.Data.Shared.Keys" #>
<#@ import Namespace="Services.Data.Enums" #>
Я подтвердил, что я предоставляю правильный путь к сборке, но я все еще получаю сообщение об ошибке:
Преобразование компиляции: имя типа или пространства имен 'Enums' не существует в пространстве имен 'Services.Data' (вы пропустили ссылка на сборку?) Apps.API.ServiceContracts C: \ source \ server \ Apps.API.ServiceContracts \ Data \ Models.tt 27