FluentNhibernate и SQLite

Я написал такой код как часть других ответов, но никогда не имел возможности представить простой тестовый комплект, на который можно ссылаться из других вопросов Stackoverflow. То, что вы просите, довольно тривиально. Это можно сделать, написав загрузчик в NASM, который содержит двоичный образ собранного кода, который вы хотите протестировать. Этот образ будет считываться с диска, начиная с LBA 1 (первый сектор после загрузчика), с использованием функции BIOS Int 13 / ah = 2 . Затем управление будет передано ему через FAR JMP на 0x0000: 0x7e00.

Код загрузчика будет выглядеть следующим образом:

bpb.inc :

%define WITH_BPB 1
global bpb_disk_info

    jmp boot_start
    TIMES 3-($-$) DB 0x90   ; Support 2 or 3 byte encoded JMPs before BPB.

    bpb_disk_info:

        ; Dos 4.0 EBPB 1.44MB floppy
        OEMname:           db    "mkfs.fat"  ; mkfs.fat is what OEMname mkdosfs uses
        bytesPerSector:    dw    512
        sectPerCluster:    db    1
        reservedSectors:   dw    1
        numFAT:            db    2
        numRootDirEntries: dw    224
        numSectors:        dw    2880
        mediaType:         db    0xf0
        numFATsectors:     dw    9
        sectorsPerTrack:   dw    18
        numHeads:          dw    2
        numHiddenSectors:  dd    0
        numSectorsHuge:    dd    0
        driveNum:          db    0
        reserved:          db    0
        signature:         db    0x29
        volumeID:          dd    0x2d7e5a1a
        volumeLabel:       db    "NO NAME    "
        fileSysType:       db    "FAT12   "

boot.asm :

[ 111]

Чтобы использовать это, вы бы сначала сгенерировали двоичный файл с именем stage2.bin. Затем вы должны построить образ диска 1.44MiB с помощью этой команды:

nasm -f bin boot.asm -o disk.img

Код в stage2.bin должен быть сгенерирован с допущением, что ORG (начальная точка) 0x07e00 в памяти. [1127 ]


Пример использования / Пример

Пример кода, сгенерированного для файла с именем stage2.bin, который можно загрузить с помощью этого тестового набора:

testcode.asm [ 1139]:

ORG 0x7e00

start:
    mov si, testCodeStr
    call print_string

    cli
.end_loop:
    hlt
    jmp .end_loop

testCodeStr: db "Test harness loaded and is executing code in stage2!", 0

; Function: print_string
;           Display a string to the console on display page 0
;
; Inputs:   SI = Offset of address to print
; Clobbers: AX, BX, SI

print_string:
    mov ah, 0x0e                ; BIOS tty Print
    xor bx, bx                  ; Set display page to 0 (BL)
    jmp .getch
.repeat:
    int 0x10                    ; print character
.getch:
    lodsb                       ; Get character from string
    test al,al                  ; Have we reached end of string?
    jnz .repeat                 ;     if not process next character
.end:
    ret

Примечание : сверху есть ORG 0x7e00. Это важно. Чтобы собрать этот файл в stage2.bin, используйте:

nasm -f bin testcode.asm -o stage2.bin

Затем создайте образ диска 1.44MiB с:

nasm -f bin boot.asm -o disk.img

Результатом должен быть образ диска размером точно 1.44MiB, содержит копию stage2.bin и загрузочный сектор нашего тестового жгута.

Файл stage2.bin может быть любым, в который записан двоичный код для загрузки и запуска в 0x0000: 0x7e00. Язык (C, ассемблер и т. Д.), Используемый для создания кода в stage2.bin, не имеет значения. Я использую NASM для этого примера. Когда этот тестовый код выполняется в QEMU с использованием qemu-system-i386 -fda disk.img, он будет выглядеть примерно так:

enter image description here


Special Примечание: : Если вы не хотите использовать bpb.inc и не собираетесь загружаться с USB с помощью эмуляции FDD, вы можете закомментировать или удалить эту строку в boot.asm

%include "bpb.inc"

5
задан Charles Ouellet 10 May 2009 в 15:05
поделиться

3 ответа

Я исправил свою проблему, получив файл System.Data.SQLite.dll, который находится в репозитории FluentNHibernate SVN.

Теперь он работает очень хорошо.

Я должен был иметь проверяя это ранее;)

7
ответ дан 18 December 2019 в 09:10
поделиться

Когда я столкнулся с этой проблемой, она была вызвана тем, что для свойства процессора моего приложения задано значение anycpu и он работает в 64-битной системе. Чтобы исправить эту проблему, я установил для своего процессора приложения значение x86. Я не думаю, что System.Data.SQLite.dll поддерживает работу с процессами x64.

10
ответ дан 18 December 2019 в 09:10
поделиться

Я сталкиваюсь с той же проблемой на машине сборки. Он отлично работает, когда я открываю проект с помощью Visual Studio, но когда я запускаю mstest.exe, он выходит из строя с указанной выше ошибкой. Он также не работает на моей локальной машине разработки, когда я запускаю из командной строки. Монитор процессов не показывает никаких попыток найти файл с помощью mstest.exe.

Машина сборки 32-разрядная, моя локальная машина 64-разрядная. Мы используем сборку из магистрали Fluent NHibernate.

ОБНОВЛЕНИЕ: Выяснилось - mstest.exe не копировал все сборки при запуске из командной строки. Я обновил localtestrun.config, чтобы включить их в раздел «Развертывание». Не уверен, почему поведение отличается от поведения IDE и средства запуска тестов из командной строки.

0
ответ дан 18 December 2019 в 09:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: