[C#] SQLite.Interop.dll System.EntryPointNotFoundException

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • skate master
  • Registratie: September 2004
  • Laatst online: 22:08

skate master

Autodesk Educator Expert

Topicstarter
Ik heb een AutoCAD plugin gemaakt in C#.
De plugin zorgt voor extra functies en bestaat uit een DLL voor standaard AutoCAD en een DLL voor AutoCAD Civil.
Beide DLL bestanden zijn in de basis gelijk, echter is de versie voor Civil aangevuld met wat Civil specifieke functies die niet in AutoCAD zitten. Tot zover werkt alles al een aantal jaren naar behoren.

Probleem
In de tool heb ik functie toegevoegd wie data leest en schrijft naar een SQLite DB.
Binnen de Civil omgeving werkt dit prima, echter onder AutoCAD krijg ik de foutmelding
System.EntryPointNotFoundException: Unable to find an entry point named 'SI04b638e115f7beb4' in DLL 'SQLite.Interop.dll'.
Ik heb via de NuGet functie de volgende SQLite items geladen:
  • Stub.System.Data.SQLite.Core.NetFramework
  • Stub.System.Data.SQLite.Core.NetStandard
  • System.Data.SQLite
  • System.Data.SQLite.Core
  • System.Data.SQLite.EF6
  • System.Data.SQLite.Linq
Bestandstructuur
Binnen AutoCAD staan de plugins allemaal in de DIR "ApplicationpPlugins\"
Zo ook mijn plugin, deze staat in de folder "pluginnaam.bundle"
Binnen deze folder heb ik de volgende structuur:
  • PackageContents.xml
  • AutoCAD
    • pluginnaam-acad.dll
    • x64\SQLite.Interop.dll
    • x86\SQLite.Interop.dll
    • System.Data.SQLite.dll
    • System.Data.SQLite.EF6.dll
    • System.Data.SQLite.Linq.dll
  • Civil
    • pluginnaam.dll
    • x64\SQLite.Interop.dll
    • x86\SQLite.Interop.dll
    • System.Data.SQLite.dll
    • System.Data.SQLite.EF6.dll
    • System.Data.SQLite.Linq.dll
De xml file in de root bevat de instructies welke DLL geladen moet worden op basis van welk programma (AutoCAD of AutoCAD Civil) er gestart wordt.

Waarom krijg ik binnen AutoCAD de foutmelding en binnen Civil niet?

Reeds geprobeerd
  • NuGet plugins verwijderd en opnieuw toegevoegd
  • x64 en x86 folders en SQLite dlls binnen de build folder verwijderd zodat deze bij de build opnieuw aangemaakt worden
Iemand een idee of richting waarin ik moet zoeken om dit werkend te krijgen?

Alle reacties


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Laatst online: 22-05 08:46

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Moet je die dependencies niet ook opnemen in de PackageContents.xml? Ik gok maar even wat hoor.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • _360_
  • Registratie: Januari 2011
  • Laatst online: 26-05 22:44
Om het helemaal zeker te weten is het goed om zowel de obj en de bin folders te verwijderen.

code:
1
Get-ChildItem -Directory -Include "obj", "bin" -Recurse | %{ Write-Host $_.FullName -fore Green; remove-item $_.FullName -Force -Recurse  }


Kan je het relevante stukje van PackageContents.xml hier eens posten zodat we mee kunnen kijken?

Mocht dit allemaal niet werken. Zou het (voor nu) een oplossing zijn om at runtime die dlls in te laden, middels een factory oid. Zodat je zelf kan controleren welke assemblies ingeladen, voordat je plugin zijn werk gaat doen? Hier zou je gelijk wat diagnostische informatie kunnen loggen op basis van hoe in de PackageContents.xml gestuurd wordt voor het inladen van de dlls.

Acties:
  • 0 Henk 'm!

  • eheijnen
  • Registratie: Juli 2008
  • Niet online
Heb je deze al bekeken / geprobeerd?
https://stackoverflow.com...ed-sqlite3-changes-intero

Wie du mir, so ich dir.


  • skate master
  • Registratie: September 2004
  • Laatst online: 22:08

skate master

Autodesk Educator Expert

Topicstarter
RobIII schreef op woensdag 14 februari 2024 @ 17:17:
Moet je die dependencies niet ook opnemen in de PackageContents.xml? Ik gok maar even wat hoor.
Nee daarin staat puur de instructie op welk commando AutoCAD moet reageren om mijn plugin te openen en welke DLL hij daar voor moet hebben. Verderop de inhoud van dit Bestand.
_360_ schreef op woensdag 14 februari 2024 @ 17:18:
Om het helemaal zeker te weten is het goed om zowel de obj en de bin folders te verwijderen.

code:
1
Get-ChildItem -Directory -Include "obj", "bin" -Recurse | %{ Write-Host $_.FullName -fore Green; remove-item $_.FullName -Force -Recurse  }


Kan je het relevante stukje van PackageContents.xml hier eens posten zodat we mee kunnen kijken?

Mocht dit allemaal niet werken. Zou het (voor nu) een oplossing zijn om at runtime die dlls in te laden, middels een factory oid. Zodat je zelf kan controleren welke assemblies ingeladen, voordat je plugin zijn werk gaat doen? Hier zou je gelijk wat diagnostische informatie kunnen loggen op basis van hoe in de PackageContents.xml gestuurd wordt voor het inladen van de dlls.
Ik heb de OBJ en BIN bestanden verwijderd, Nuget plugin opnieuw geinstalleerd en mijn plugin opnieuw gebuild. Helaas met dezelfde foutmelding.

PackageContents.xml
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<?xml version="1.0" encoding="utf-8"?>
<ApplicationPackage 
   SchemaVersion="1.0"
   Name="PluginNaam"
   AppVersion="1.0"
   ProductCode="{7c8c3593-7b1a-4bbd-b5e1-5f87a69cff8d}"
   Author="Auteur"
   Icon="./Contents/logo.ico"
   HelpFile="./Docs/Handleiding.pdf"
   Description="PluginNaam"
   UpgradeCode="{7c8c3593-7b1a-4bbd-b5e1-5f87a69cff8d}"> <!-- Remain UpgradeCode -->
  <CompanyDetails
    Name="Bedrijfnaam"
    Phone="++3112345678"
    Url="https://www."
    Email="mailaddres" />

  <Components> 
    <!-- Alle AutoCAD producten -->
    <RuntimeRequirements
      Platform="AutoCAD"
      OS="Win32|Win64"
      SeriesMin="R19.1"
      SeriesMax="R26.0" />

    <ComponentEntry
      AppName="PluginNaam"
      ModuleName="./Contents/AutoCAD/PluginNaam-ACAD.dll"
      AppDescription="AutoCAD Tools"
      LoadOnAutoCADStartup="True">
      <Commands GroupName="FUNCTIECOMMANDO">
        <Command Local="FUNCTIECOMMANDO" Global="FUNCTIECOMMANDO"/>
      </Commands>
    </ComponentEntry>
    </Components>
    
    <!-- Alle Civil3D producten -->
    <Components> 
    <RuntimeRequirements
      Platform="Civil3D"
      OS="Win32|Win64"
      SeriesMin="R19.1"
      SeriesMax="R26.0" />

    <ComponentEntry
       AppName="PluginNaam"
      ModuleName="./Contents/Civil/PluginNaam.dll"
      AppDescription="AutoCAD Tools"
      LoadOnAutoCADStartup="True">
      <Commands GroupName="FUNCTIECOMMANDO">
        <Command Local="FUNCTIECOMMANDO" Global="FUNCTIECOMMANDO"/>
      </Commands>
    </ComponentEntry>
    </Components>
</ApplicationPackage>

In dit bestand is goed te zien dat er voor zowel AutoCAD als Civil een Component entry is met welke DLL geladen moet worden en welk functiecommando daar bij hoort om de plugin te starten.
Deze had ik niet gezien / gemist. Helaas zijn bij mij beide versies gelijk en ook de meest actuele (1.0.118.0).

Ander Nuget plugins
Naast de SQLite heb ik ook de NewtonSoft Json plugin via Nuget geinstalleerd staan bij beide plugins. Deze geeft geen problemen. Voor zover ik kan zien zit het dus echt in de SQLite maar ik krijg het niet opgelost.

  • eheijnen
  • Registratie: Juli 2008
  • Niet online
En die oudere versie van de plugin die geen Sqlite gebruikt werkt die wel nog steeds?
Die foutmelding in de topicstart krijg je die direct als Autocad start of op een ander moment?

Wie du mir, so ich dir.


  • skate master
  • Registratie: September 2004
  • Laatst online: 22:08

skate master

Autodesk Educator Expert

Topicstarter
eheijnen schreef op donderdag 15 februari 2024 @ 10:40:
En die oudere versie van de plugin die geen Sqlite gebruikt werkt die wel nog steeds?
Die foutmelding in de topicstart krijg je die direct als Autocad start of op een ander moment?
Alle functies van de plugin waar geen Sqlite voor nodig is werken gewoon. De foutmelding komt pas zodra ik een van de functies opstart waar Sqlite voor nodig is.

Binnen Civil (op dezelfde computer) werkt de plugin volledig inclusief Sqlite gebruik.
Er zit ook geen verschil in de code voor de functies die gebruik maken van Sqlite, het enige verschil in beide plugins is de Civil specifieke tools wie niet in AutoCAD werken maar die hebben geen connectie met Sqlite.

  • Arie-
  • Registratie: December 2008
  • Niet online
Ik ben geen C# developer en ken niets van autocad, maar misschien een andere invalshoek. Speelt het probleem alleen op je eigen pc? If so: weet je zeker dat hij de DLL's pakt meegeleverd met je plugin en niet een andere DLL die een versie mismatch op SQLite veroorzaakt?

  • eheijnen
  • Registratie: Juli 2008
  • Niet online
skate master schreef op donderdag 15 februari 2024 @ 10:46:
[...]

Alle functies van de plugin waar geen Sqlite voor nodig is werken gewoon. De foutmelding komt pas zodra ik een van de functies opstart waar Sqlite voor nodig is.

Binnen Civil (op dezelfde computer) werkt de plugin volledig inclusief Sqlite gebruik.
Er zit ook geen verschil in de code voor de functies die gebruik maken van Sqlite, het enige verschil in beide plugins is de Civil specifieke tools wie niet in AutoCAD werken maar die hebben geen connectie met Sqlite.
Zijn er nog andere plugins in Autocad actief ? die misschien ook Sqlite gebruiken?

Wie du mir, so ich dir.

Pagina: 1