SQLite.Interop.dll gesperrt nach dem ausführen von Visual Studio 2012, Unit Test Framework-tests
- Visual Studio 2012
- SQLite 1.0.82.0 (von nuget)
Ich versuche, mit der "Alle Ausführen" - Befehl im "Test-Explorer"
Der folgende Fehler passiert, nachdem Sie einmal den test ausführen ... danach wird es bauen nicht mehr, bis Sie visual studio neu starten
Hier ist die build-Fehler
Der Prozess kann nicht auf die Datei zugreifen 'SQLite.Interop.dll' denn es ist
wird von einem anderen Prozess verwendet
hier ist der code
using System.Data.SQLite;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace Test.Sqlite
{
[TestClass]
public class Test_Sqlite_Locking
{
[TestMethod]
public void can_create_table()
{
using(var fact = new SQLiteFactory())
using (var conn = fact.CreateConnection())
{
conn.ConnectionString = "Data Source=:memory:;Version=3;New=True;";
conn.Open();
//conn.Close();
}
//SQLiteConnection.ClearAllPools();
//GC.Collect();
}
}
}
Habe ich versucht, die Verbindung zu schließen, ruft ClearAllPools, GC.Sammeln und erstellen der SQLiteConnection direkt (statt der Fabrik) ... immer noch dasselbe Problem
Diese funktioniert, wenn Sie DEBUGGEN, ALLE TESTS ... aber es ist, wenn man nur die tests Ausführen, scheint es sperren, um es bis
- Können Sie wickeln Sie ein Try Catch um die conn.öffnen und sehen, was die Fehler sind, die Sie versuchen zu halten, dass die Verbindung..? wenn also nach der Verbindung sollte es Entsorgt werden, dass Sie es verpackt in einen mit{}
- Ich habe das ausprobiert ... aber dieser Fehler ist ein BUILD-Fehler ... nicht ein runtime error ... und es geschieht nur, nachdem Sie "Ausführen" den tests nach, dass es scheint, Visual Studio hat immer noch etwas geöffnet, und die Bibliothek-Datei ist gesperrt
- die Linie macht es Fehler auf .. ? die using(var Tat = new SQLiteFactory())
- kann man einfügen, was die config-Abschnitt sieht wie sollte in etwa so Aussehen <configuration> <system.Daten> <DbProviderFactories> <entfernen invariant="System.Daten.SQLite" /> <add name="SQLite Data Provider" invariant="System.Daten.SQLite" Beschreibung=".Net Framework Data Provider for SQLite" type="System.Daten.SQLite.SQLiteFactory, System.Daten.SQLite" /> </DbProviderFactories> </system.Daten>
- gibt es keine app.config ... hier ist die vollständige Fehlermeldung "Warning 1 Konnte nicht kopieren "D:\Code\Test.Sqlite\Test.Sqlite\x86\SQLite.Interop.dll" zu "bin\Debug\x86\SQLite.Interop.dll". Anfang wiederholen 1 in 1000ms. Der Prozess kann nicht auf die Datei zugreifen 'bin\Debug\x86\SQLite.Interop.dll" weil es wird von einem anderen Prozess verwendet. Test.Sqlite "
- können Sie das kopieren der DLL ' s manuell und starten Sie den Rechner neu..?
- es funktioniert 1 mal, nachdem ich visual studio neu starten ... wenn ich versuche ein sauberes, bevor ich Baue, bekomme ich eine ähnliche Fehlermeldung, dass die Datei in Benutzung ist
- lassen Sie uns weiter, diese Diskussion im chat
- können GAC-DLL ' s oder festlegen der Eigenschaft auf die DLL zu kopieren Lokalen hier ist ein stackoverflow-link, auf den Sie verweisen können.. stackoverflow.com/questions/9725979/... auch, wie sind Sie nach dem schließen des Programms nach unten, wenn es zu testen..? es wäre schön zu sehen, mehr code..ich bin mir sicher, dass es etwas anderes ...
- das ist der gesamte code ... es ist ein visual studio-test unit-test-framework-Klassenbibliothek ... meine dlls gesetzt werden, um lokale Kopie
- Ok, eine Letzte Sache.. ist das 4.0 oder 3.5 framework.. versuchen Sie es auf 3,5 speichern Sie es dann umdrehen und ändern Sie den Projekt-Eigenschaften-Seite Einstellung zurück zu 4.0
- Ich kann nur empfehlen eine andere Sache, aber Sie müssen ändern Sie den code ein bisschen.. ich werde posten, was ich weiß, funktioniert bei mir, wenn ich eine Verbindung zu SQL Lite
Du musst angemeldet sein, um einen Kommentar abzugeben.
Konnte ich nicht finden, die option in VS2012 (zumindest nicht für standard-unit-tests), daher kam ich auf eine andere Lösung:
Das problem, das Sie konfrontiert sind, kommt von der Tatsache, dass der unit-test-runner geladen bleibt, so dass wiederholte Testläufe sind schneller. Da
SQLite.Interop.dll
wird sich wohl auch nicht ändern zu oft, ich habe dieCopyToOutputDirectory
optionPreserveNewest
eher als die Standard -Always
.Können Sie dies tun, öffnen Sie die Eigenschaften (F4) Ansicht und Auswahl der
SQLite.Interop.dll
Datei in Ihrer Projektmappe. Das einzige mal, das wird wahrscheinlich noch gesperrt ist, wenn Sie ein upgrade auf eine neuere version von SQLite und Neustart VS2012 dann funktioniert OK für mich.Arbeitete ich, um dieses mithilfe der folgenden als pre-build-Ereignis auf die betroffenen test-Projekte:
für 64-bit:
oder für 32-bit:
Diese lautlos tötet die execution engine vor der Erstellung der test-Projekt. Die
/FI "MEMUSAGE gt 1"
beendet den Befehl (und damit dem Aufbau), nicht wenn die execution engine nicht läuft.Versuchen Sie dies:
Sollten Sie in der Lage sein, laufen SQLite-basierte tests jetzt ohne Neustart.
In Visual Studio 2013 - Gehen Sie zu "Testen > Test-Settings - > halten Sie Test Execution Engine Running", und deaktivieren Sie es! Für mich funktioniert.
Den Problemumgehung zur Verfügung gestellt von Philipp Aumayr (set
CopyToOutputDirectory
optionPreserveNewest
eher als die Standard -Always
) funktioniert für die meisten Szenarien aber nicht alle, leider. Wie andere Fragen auf, SO zeigen Sie sich, die Tatsache, dassvstest.executionengine
nicht kündigen ist ein häufiges Problem in VS2012 - noch schlimmer, Microsoft-Entwickler behandeln Sie dies als eine Funktion und von design. Die option um dieses Verhalten zu verhindern gab es in VS2010 wurde aber entfernt, in VS2012.Falls auch Sie haben ein problem mit dieser "Verbesserung" ist, dann Stimm bitte auf der Microsoft Connect-support-Problem vstest.executionengine.x86.exe (32-bit) - Nicht Schließen (betrifft sowohl x86-und x64-trotz des Titels).
Ich weiß, diese Frage ist alt, aber ich hatte dieses problem und einige der Antworten hier löste eine Idee. Eines der ersten Probleme auf die ich stieß, wenn Sie versuchte, unit/integration tests rund um SQLite war, dass MSTest (die wir für scripted-builds) war nicht bereitstellen aller notwendigen Abhängigkeiten, um den test ausführen, ist "Out" - Verzeichnis vor dem ausführen der Tests, die tests sind fehlgeschlagen. Der beste Weg den ich gefunden, um dieses problem zu lösen war, fügen Sie diese Attribute auf meine test-Klasse:
Dies scheint auch dieses Problem zu lösen...ich vermute, dass diese Ursachen VSTest zu laden, eine andere Kopie dieser Abhängigkeiten, so dass VSBuild noch machen kann, was es mit der Kopie in Ihrem normalen /bin/- Verzeichnis.
Stellen Sie außerdem sicher, dass Ihre Datenbank installiert in den richtigen Ordner
SQLite-Connection-Strings
Daten-adapter, möchten Sie vielleicht, um zu versuchen, sowie mit SQL Lite
Mit SQLitew mit .NET
Lesen Sie diesen Artikel, um zu sehen, ob es hilft, um Ihr Problem zu beheben sowie
System.Daten.SQLite.View Ticket
Versuchen Entsorgung der Verbindung, wie unten beschrieben. Es funktionierte gut für mich.