7

Mam bibliotekę klasy C#, która odwołuje się do System.Data.SQLite (from nuget). Jest to struktura mojego folderu bin po kompilacji:Visual Studio - Instalacja InstallShield w projekcie z System.Data.SQLite

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

System.Data.SQLite potrzebuje SQLite.Interop do uruchomienia i prawidłowego dll występuje w czasie wykonywania. Jednak po wygenerowaniu instalacji z InstallShield, która zawiera pierwotne dane wyjściowe projektu, foldery x86 i x64 nie są kopiowane, a moja aplikacja nie działa.

Istnieje sposób na wymuszenie Visual Studio włączenia folderów x86 i x64 do głównego wyjścia?

Jest jakiś sposób na to foldery ręcznie w InstallShield z względnej ścieżce?

Moja okolica:

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

Te raczej brzmią jak zależności niż pierwotne, ale pamiętaj, że grupy wyjść są dla wygody, a nie kontroli. Jeśli chcesz mieć pełną kontrolę nad ustawieniami, lepiej wybieraj pliki statycznie. –

+0

Niestety, foldery x64 i x86 są zarządzane przez pakiet Nuget, więc jedyny sposób, jaki znalazłem, to użycie bezwzględnej ścieżki. Działa, ale każdy programista będzie musiał skonfigurować w nim na swoim komputerze. Byłoby wspaniale, gdybym mógł użyć względnej ścieżki, ale nie znalazłem, jak z darmową edycją. – Rafael

+1

@Rafael Tak, żebyś wiedział. Możesz ręcznie zmienić plik setup.isl z 'c: \ yourpath \ packages \ System.Data.SQLite.Core.1.0.94.0 \ build \ net40 \ x86 \ SQLite.Interop.dll' na' <ISProjectFolder>. . \ packages \ System.Data.SQLite.Core.1.0.94.0 \ build \ net40 \ x86 \ SQLite.Interop.dll' (lub gdziekolwiek znajduje się twój SQLite.Interop) – Markus

Odpowiedz

0

Tak, istnieje sposób na dodawanie/wdrażanie folderów za pomocą Instal lShield. W zakładce Pliki możesz dodać pliki/folder. Podczas dodawania tych plików możesz również ustawić względną ścieżkę. Po prostu ustaw właściwość ze ścieżką i użyj tej właściwości na swojej względnej ścieżce. Gdzie więc chcesz skopiować te pliki (lokalizacje referencyjne dla DLL), możesz dodać tę strukturę folderów przez InstallShield i możesz w tym celu dodać pliki.

0

Po prostu napotkałem ten sam problem, używając VS2013/Installshield LE; W końcu zdecydowałem się zmienić pakiet NuGet na moim komputerze, aby NIE tworzyć folderu x86 dla SQLite.interop.dll w folderze build.

Aby to zrobić, zajrzyj do folderu "packages \ System.Data.SQLite.Core.1.0.104.0 \ build" w katalogu projektu. Następnie wybierz podfolder odpowiedni dla wersji .NET, na którą kierujesz, i otwórz plik "System.Data.SQLite.Core.targets" w edytorze tekstu. Będziesz chciał usunąć wszystkie odniesienia do "%(RecursiveDir)", Z WYJĄTKIEM w sekcji "SQLite Interop Library Content Items". Zapisz, wyczyść i przebuduj - biblioteka DLL interop powinna teraz znajdować się w tym samym folderze co główny plik wykonywalny/etc, a Installshield powinien być w stanie automatycznie uwzględnić ją jako zależność.

Jeśli nie pojawi się we właściwym miejscu, spróbuj edytować inny plik .target w wersji .NET, aż trafisz w prawy.

Powiązane problemy