Прежде всего, эта проблема возникает, только когда я запускаю db4oTool для сборки, использующей профиль Mono For Android, нацеливание на обычную библиотеку классов .Net работает нормально.
Проблема: я выполняю следующую командукак событие после сборки:
Db4oTool.exe -tp -vv -debug -collections -by-attribute: DoNotDb4OEnhance -not $ (TargetPath)
Это приводит кв окне вывода выводится следующая ошибка: (Полный журнал здесь )
Метод ввода 'System.Int32 Ats.Loto.Model.EnergyTagExtensions :: GetNextTagNumber (System.Collections.Типы Generic.IList 1<Ats.Loto.Model.EnergyTag>,Ats.Loto.Model.EnergyType)'
System.NullReferenceException: Object reference not set to an instance
of an object.
at Db4oTool.TA.TACollectionsStep.<TAEnabledCollectionInstantiations>b__4(Instruction
candidate)
at Db4oTool.Core.InstrumentationUtil.<Where>d__0.MoveNext()
at Db4oTool.TA.TACollectionsStep.InstrumentCollectionInstantiation(MethodDefinition
methodDefinition)
at Db4oTool.TA.TACollectionsStep.Process(MethodDefinition method)
at Db4oTool.TA.TAInstrumentation.ProcessMethod(MethodDefinition method)
at Db4oTool.Core.AbstractAssemblyInstrumentation.ProcessMethods(IEnumerable
methods)
at Db4oTool.Core.AbstractAssemblyInstrumentation.ProcessTypes(IEnumerable
1, действие Предикат 1 filter, Action
1) в Db4oTool.Core.AbstractAssemblyInstrumentation.ProcessAssembly () в Db4oTool.Core.AbstractAssemblyInstrumentation.Run (контекст InstrumentationContext) в Db4oTool.Pol..Program.RunPipeline (параметры ProgramOptions) в Db4oTool.Program.Run (параметры ProgramOptions) в Db4oTool.Program.Main (String [] args)
Если я удалю атрибут -collections, он будет работать.Я пытаюсь исключить класс "EnergyTagExtensions" с помощью атрибута
-by-атрибут: DoNotDb4OEnhance -not
, но он либо не действует, либо я делаю этонеправильно.
Ниже приведен класс, который, по-моему, приводит к тому, что db4otool становится несчастным из-за журнала.
[DoNotDb4OEnhance]
public static class EnergyTagExtensions
{
public static int GetNextTagNumber(this IList<EnergyTag> source, EnergyType activeEnergyType)
{
if (source.Count == 0)
return 1;
var concernedTags =
source.Where(c => c.TagId != null && c.TagId.StartsWith(activeEnergyType.Prefix)).OrderBy(
c => c.TagIndex).ToList();
if (!concernedTags.Any())
return 1;
return (concernedTags.Max(c => c.TagIndex) + 1);
}
}
Есть какие-нибудь идеи о том, как заставить это работать?Заранее благодарим за понимание.