2015-09-17 24 views
5

Używam pakietu nuget w wersji System.Data.SQLite Core Version: 1.0.98.1 z Visual Studio 2015. Kiedy buduję swój projekt, który zawiera odniesienia mój pakiet System.Data.SQLite, kopiuje dwa foldery (x86 i x64), z których każdy zawiera plik SQLite.Interop.dll do katalogu wyjściowego. Jednak kiedy buduję swój projekt testowy lub jakikolwiek inny projekt, który odwołuje się do wcześniej wspomnianego projektu, te foldery nie zostaną skopiowane do katalogu wyjściowego nadrzędnego projektu i otrzymam wyjątek DllNotFoundException w pliku SQLite.Interop.dll.Pliki SQLite.Interop.dll nie kopiują do wyjściowej ścieżki projektu, gdy jest to wymagane przez projekt odwołany

Uwaga: jest to szczególnie, gdy projekt przedstawieniu System.Data.SQLite odwołuje się innym projektem

Odpowiedz

16

przy wyslylce rozwiązanie jako doumented here jest stworzenie System.Data.SQLite.Core.targets.user w twojej pakiety \ System.Data.SQLite.Core.1.0.98.1 \ [\ zbudować wersję ramowego tutaj] folder zawierający

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
<PropertyGroup> 
<ContentSQLiteInteropFiles>true</ContentSQLiteInteropFiles> 
<CopySQLiteInteropFiles>false</CopySQLiteInteropFiles> 
<CleanSQLiteInteropFiles>false</CleanSQLiteInteropFiles> 
<CollectSQLiteInteropFiles>false</CollectSQLiteInteropFiles> 
</PropertyGroup> 
</Project> 

Ale jeśli nie chcesz coś dodać w folderze pakietów do kontroli źródła, możesz po prostu dodać następujące elementy bezpośrednio do pliku projektu

<PropertyGroup> 
    <ContentSQLiteInteropFiles>true</ContentSQLiteInteropFiles> 
    <CopySQLiteInteropFiles>false</CopySQLiteInteropFiles> 
    <CleanSQLiteInteropFiles>false</CleanSQLiteInteropFiles> 
    <CollectSQLiteInteropFiles>false</CollectSQLiteInteropFiles> 
</PropertyGroup> 
+1

Moje lokalne kompilacje działały poprawnie - pliki CopySQLiteInteropFiles działały i kopiowały pliki do OutDir na moim komputerze. Ale ta sama kompilacja nie powiodła się podczas moich testów w TeamCity - Dll nie znalazł wyjątków na brakujących plikach Interop. Tworzenie właściwości CopySQLiteInteropFiles w moim pliku proj było tym, co sprawiło, że TeamCity skopiowało pliki interopów. +1 –

+0

Drugie rozwiązanie sprawdziło się doskonale. Czy zalecana przerwa nie pojawia się, gdy tylko pojawi się nowa wersja z Nuget? – quarkonium