Db4oTool - исключая класс из Enhacement - PullRequest
1 голос
/ 25 января 2012

Прежде всего, эта проблема возникает, только когда я запускаю 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);
    }
}

Есть какие-нибудь идеи о том, как заставить это работать?Заранее благодарим за понимание.

1 Ответ

1 голос
/ 25 января 2012

Относительно того, что Db4oTool не "уважает" фильтр, проблема в том, что вам нужно ввести полное имя атрибута.

Также обратите внимание, что вы не можете опустить Атрибут в имени атрибута (я предполагаю, что вы следовали рекомендациям .Net и назвали свой атрибут как DoNotDb4OEnhanceAttribute )

Я только что заполнил вопрос , чтобы улучшить документацию по Db4oTool.

Что касается NullReferenceException , я попытаюсь воспроизвести, но если мне не удастся, вы можете отправить мне в частном порядке небольшой образец сборки, который воспроизводит его?

РЕДАКТИРОВАТЬ - Март / 01/2012

Я проверил документацию Monodroid и обнаружил, что Func действительно определено в mscorlib (на Monodroid), поэтому, вероятно, Db4oTool ищет типы в неправильной сборке

...