7

Ho una libreria di classi C# che fa riferimento a System.Data.SQLite (from nuget). Questa è la struttura della mia cartella bin dopo la generazione:Visual Studio - Installazione InstallShield in un progetto con System.Data.SQLite

  • MyProject.dll
  • System.Data.SQLite.dll
  • x86/SQLite.Interop.dll
  • x64/SQLite.Interop .dll

System.Data.SQLite bisogno della SQLite.Interop a correre e la DLL corretta è trovato in fase di esecuzione. Tuttavia, quando viene generata un'installazione con InstallShield che include l'output primario del progetto, le cartelle x86 e x64 non vengono copiate e la mia applicazione non riesce a funzionare.

C'è un modo per forzare Visual Studio per includere le cartelle x86 e x64 nell'output principale?

c'è alcun modo per includere le cartelle manualmente nella InstallShield con relativa percorso?

Il mio ambiente:

  • Visual Studio 2012 professionisti
  • Install Shield 2013 Limited Edition (Free)
  • System.Data.SQLite 1.0.96
+0

Quelli suonano come dipendenze piuttosto che come output primario, ma ricorda che i gruppi di output sono per comodità piuttosto che per controllo. Se si desidera il pieno controllo della configurazione, è meglio selezionare i file in modo statico. –

+0

Sfortunatamente, le cartelle x64 e x86 sono gestite dal pacchetto Nuget, quindi l'unico modo che ho trovato è di usare un percorso assoluto. Funziona, ma ogni sviluppatore dovrà configurarlo al suo interno. Sarebbe bello se potessi usare un percorso relativo ma non ho trovato come con la versione gratuita. – Rafael

+1

@ Rafael Solo per quello che sai. È possibile modificare manualmente il file setup.isl da 'c: \ yourpath \ packages \ System.Data.SQLite.Core.1.0.94.0 \ build \ net40 \ x86 \ SQLite.Interop.dll' a' <ISProjectFolder>. . \ packages \ System.Data.SQLite.Core.1.0.94.0 \ build \ net40 \ x86 \ SQLite.Interop.dll' (o dove mai hai il tuo SQLite.Interop localizzato) – Markus

risposta

0

Sì, c'è un modo per aggiungere/distribuire cartelle attraverso Instal lShield. Sotto le schede File puoi aggiungere i file/la cartella. Durante l'aggiunta di questi file è possibile impostare il percorso relativo anche in questo. Basta impostare una proprietà con il percorso e utilizzare quella proprietà nel percorso relativo. Quindi, dove si desidera copiare questi file (posizioni di riferimento per DLL), è possibile aggiungere tale struttura di cartelle tramite InstallShield ed è possibile aggiungere file in questo.

0

Ho appena incontrato lo stesso problema utilizzando VS2013/Installshield LE; Ho finito per optare per la modifica del pacchetto NuGet sulla mia macchina per NON creare la cartella x86 per SQLite.interop.dll sotto la cartella build.

Per fare ciò, cercare nella cartella "packages \ System.Data.SQLite.Core.1.0.104.0 \ build" nella directory del progetto. Quindi seleziona la sottocartella pertinente alla versione di .NET che hai scelto come target e apri il file "System.Data.SQLite.Core.targets" in un editor di testo. Dovrai eliminare tutti i riferimenti a "%(RecursiveDir)" TRANNE nella sezione "SQLite Interop Library Content Items". Salva, pulisci e ricompila: la dope di interoperabilità dovrebbe ora trovarsi nella stessa cartella dell'eseguibile principale/etc e Installhield dovrebbe essere in grado di includerlo automaticamente come dipendenza.

Se non viene visualizzato nel posto giusto, provare a modificare un file .target della versione .NET diversa finché non si preme quello giusto.

Problemi correlati