2015-09-17 6 views
5

Ich benutze das System.Data.SQLite Core Version: 1.0.98.1 nuget-Paket mit Visual Studio 2015. Wenn ich mein Projekt, dass Referenzen Mein System.Data.SQLite-Paket kopiert zwei Ordner (x86 und x64), die jeweils eine SQLite.Interop.dll enthalten, in das Ausgabeverzeichnis. Wenn ich jedoch mein Testprojekt oder ein anderes Projekt, das auf das zuvor erwähnte Projekt verweist, erstelle, werden diese Ordner nicht in das Ausgabeverzeichnis des übergeordneten Projekts kopiert, und ich erhalte eine DllNotFoundException auf der SQLite.Interop.dll.SQLite.Interop.dll-Dateien werden nicht in den Projektausgabepfad kopiert, wenn das referenzierte Projekt erforderlich ist

Hinweis: speziell das ist, wenn das Projekt System.Data.SQLite Referenzierung von einem anderen Projekt verwiesen wird

Antwort

16

Die Recomended Lösung als doumented here in eine System.Data.SQLite.Core.targets.user zu erstellen, ist Ihr Pakete \ System.Data.SQLite.Core.1.0.98.1 \ bauen \ [Ihre Framework-Version hier] Ordner

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

enthält, aber wenn Sie nicht wollen, etwas in Ihrer Pakete Ordner Quellcodeverwaltung hinzuzufügen, Sie können einfach Folgendes direkt zu Ihrer Projektdatei hinzufügen:

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

Meine lokalen Builds funktionierten einwandfrei - die CopySQLiteInteropFiles liefen und kopierten Dateien in OutDir auf meinem Computer. Aber der gleiche Build ist bei meinen Tests auf TeamCity fehlgeschlagen - Dll hat keine Ausnahmen für die fehlenden Interop-Dateien gefunden. Das Erstellen der CopySQLiteInteropFiles-Eigenschaften in meiner proj-Datei hat dazu geführt, dass TeamCity die Interop-Dateien kopiert hat. +1 –

+0

Zweite Lösung funktionierte gut für mich. Empfiehlt sich die empfohlene Pause nicht, sobald Sie eine neue Version von nuget erhalten? – quarkonium

Verwandte Themen