- Загрузка конфигурации шага из базы данных
- Для каждого шага конвейера загружается соответствующая dll. к конкретному шагу
- Вызов (внутри конвейера) метода Execute() блока, известного как шаг
24/04/08 13:31:48.914 [Ошибка] Шаг CalculateDestinationToWarehouse: System.NullReferenceException: ссылка на объект не установлена на экземпляр объекта.
в LoadSingleArticleIntoWarehouse.CalculateDestinationToWarehouse.Execute(данные ILogicPointContextData)
в Plms.Pipelines.Infrastructure.Builders.PipelineBuilder.c__DisplayClass3_1.d.MoveNext() в E:\ папка\папка\PipelineBuilder.cs:строка 41
Это нормально, но это указывает на основное приложение и ничего не дает мне на этом этапе сторона. Поэтому найти реальную строку, где произошло исключение, сложно.
Что еще более странно, так это то, что путь, указанный в catch в конце, указывает на папку на моем компьютере, где установлено приложение. на совершенно другой машине.
Что мне здесь делать? Должен ли я попытаться добавить файл .pdb для каждого шага? В этом случае файл PDB загружается автоматически во время выполнения? Понятно, что я пытаюсь сделать?
РЕДАКТИРОВАТЬ
Как загрузить соответствующую dll?< /h3>
Я загружаю dll следующим образом:
Код: Выделить всё
var dllFiles = Directory.GetFiles(_path, "*.dll");
foreach (var dllFile in dllFiles)
{
var dllKey = Path.GetFileNameWithoutExtension(dllFile)?.Split('.')?.LastOrDefault();
// Match Dll with database Dll name configuration
if (attributeDefs.Any(x => x.Key.ToLower() == dllKey?.ToLower()))
{
AddDllStep(dllFile, dllKey);
}
}
private void AddDllStep(string assemblyPath, string key)
{
if (!File.Exists(assemblyPath))
{
_logger.LogError($"No DLL found for path: [{assemblyPath}]");
return;
}
var assemblyDll = Assembly.LoadFrom(assemblyPath);
var stepType = assemblyDll.GetTypes()
.FirstOrDefault(t => typeof(IStep).IsAssignableFrom(t) && !t.IsInterface && !t.IsAbstract);
if (stepType == null)
{
_logger.LogError($"There is no DLL implementing IStep interface");
return;
}
AddOrUpdateStep(key, stepType);
}
Как выглядит ваш метод CalculateDestinationToWarehouse.Execute?
Это момент, когда вызывается метод Execute шага (это делается для каждого экземпляра шага). :
Код: Выделить всё
try
{
return await step.Execute(input);
}
catch (Exception ex)
{
context.Logger?.LogError($"Step {step.StepKey}: {ex}");
return input;
}
Влияет ли загрузка dll в «режиме цепочки» на трассировку стека? Это означает, что если у меня есть программное обеспечение A, которое загружает Dll B и использует его, а затем Dll B, которое загружает Dll C, потеряет ли Dll C трассировку стека при возникновении исключения?
Подробнее здесь: https://stackoverflow.com/questions/782 ... oaded-dlls
Мобильная версия