2010-12-16 9 views
12

Auf den ersten Blick schien mein Problem ein allgemeines zu sein: Ich habe eine benutzerdefinierte MS Build-Aufgabe in einigen meiner Projekte. Nachdem ich die Projekte kompiliert habe, kann ich die Build-Aufgabe nicht mehr kompilieren - die Build-Task-Assembly wird von Visual Studio gesperrt.Benutzerdefinierte MSBuild Task sperrt Assembly

Ich habe eine Menge Beiträge hier gefunden, die sagen "Erben von AppDomainIsolatedTask".

Meine Aufgabe tut schon. Die Assembly enthält nichts anderes als diese Aufgabe. Die AppDomain scheint entladen zu sein, zumindest wird das DomainUnload-Ereignis ausgelöst. Und abhängige Assemblys werden korrekt entladen.

Die Assembly, die die Build-Aufgabe selbst enthält, wird jedoch von devenv.exe gesperrt (was ich von ProcessExplorer doppelt überprüft habe).

Ich fand einen anderen Beitrag mit der Aussage 'Setze die GenerateResourceNeverLockTypeAssemblies Eigenschaft', was vielversprechend klang, aber auch nicht half.

Also, ich frage mich, was sonst noch schief gehen könnte. Das Verhalten ist das gleiche, egal ob ich VS2008 oder 2010 verwende.

+0

Überprüfen Sie die Antworten von http://stackoverflow.com/questions/3371545/visual-studio-2008-locks-custom-msbuild-task-assemblies – alexandrul

+1

Das ist nicht die gleiche Frage. Ich habe das gleiche Problem, und das Problem ist nicht, dass die Task Assembly gesperrt ist (was verständlich ist). Das Problem ist, dass jede DLL-Datei, die Sie innerhalb Ihrer Aufgabe laden (z. B. Assembly.LoadFrom()) wird nie freigegeben werden, auch nachdem Ihre Aufgabe AppDomain entsorgt wird, und auch wenn Sie eine andere AppDomain selbst erstellen und laden Sie die DLL von dort: DLL ist immer noch gesperrt, nachdem Sie die AppDomain geschlossen haben. Derselbe Code funktioniert in einer Konsolen-App (das Programm läuft noch, aber die DLL wird freigegeben, wenn Sie die Appdomain schließen), aber auf VS-Task verhält es sich anders – Sheepy

+0

Dies ist keine Antwort auf Ihre Frage, aber wenn Sie es tun Irgendeine Art von Codegen aus VS IDE heraus, während die IDE läuft, dann ist es wahrscheinlich besser, entweder T4 Templates oder ein VS Custom Tool zu nutzen. Dies sollte Ihr Problem besonders bei der Verwendung von T4-Vorlagen beheben. –

Antwort

-3

Es kann durch Ändern der Dateisystemberechtigungssicherheit gelöst werden. Setzen Sie Ihren aktuellen Benutzer als Miteigentümer der gesperrten Datei.

Verwandte Themen