Aktualizacja: przykładowy projekt odtwarzający ten błąd można znaleźć tutaj w Microsoft Connect . Przetestowałem również i zweryfikowałem, czy rozwiązanie podane w zaakceptowanej odpowiedzi poniżej działa na tym przykładowym projekcie. Jeśli to rozwiązanie nie działa, prawdopodobnie masz inny problem (który należy do osobnego pytania).
To pytanie zostało zadane wcześniej, zarówno tutaj na Stack Overflow, jak i w innych miejscach, ale żadna z sugestii, które znalazłem do tej pory, nie pomogła mi, więc muszę po prostu spróbować zadać nowe pytanie.
Scenariusz: mam prostą aplikację Windows Forms (C #, .NET 4.0, Visual Studio 2010). Ma kilka podstawowych formularzy, które dziedziczy większość innych formularzy, używa Entity Framework (i klas POCO) do dostępu do bazy danych. Nic szczególnego, nic wielowątkowego ani nic.
Problem: Przez jakiś czas wszystko było w porządku. Następnie, zupełnie nieoczekiwany, Visual Studio nie udało się skompilować, kiedy miałem uruchomić aplikację. Otrzymałem ostrzeżenie „Nie można usunąć pliku„ ... bin \ Debug \ [ProjectName] .exe ”. Dostęp do ścieżki„ ... bin \ Debug \ [ProjectName] .exe ”jest zabroniony.” i błąd „Nie można skopiować pliku„ obj \ x86 \ Debug \ [ProjectName] .exe ”do„ bin \ Debug \ [ProjectName] .exe ”. Proces nie może uzyskać dostępu do pliku„ bin \ Debug \ [ProjectName] .exe „ponieważ jest wykorzystywany w innym procesie”. (Dostaję zarówno ostrzeżenie, jak i błąd podczas uruchamiania Przebuduj, ale tylko błąd podczas uruchamiania Kompilacji - nie sądzisz, że to jest istotne?)
Rozumiem doskonale, co mówi ostrzeżenie i komunikat o błędzie: Visual Studio najwyraźniej próbuje zastąpić plik exe, jednocześnie z jakiegoś powodu blokując go. Jednak to nie pomaga mi znaleźć rozwiązania problemu ... Jedyne, co znalazłem, działa to zamknięcie programu Visual Studio i ponowne uruchomienie. Budowanie i uruchamianie działa, dopóki nie zmienię niektórych formularzy, potem znów mam ten sam problem i muszę ponownie uruchomić ... Dość frustrujące!
Jak wspomniałem powyżej, wydaje się, że jest to znany problem, więc istnieje wiele sugerowanych rozwiązań. Wymienię tylko to, co już próbowałem tutaj, aby ludzie wiedzieli, co pominąć:
- Tworzenie nowego czystego rozwiązania i po prostu skopiuj pliki ze starego rozwiązania.
Dodanie następujących elementów do zdarzenia przed kompilacją projektu:
if exist "$(TargetPath).locked" del "$(TargetPath).locked" if not exist "$(TargetPath).locked" if exist "$(TargetPath)" move "$(TargetPath)" "$(TargetPath).locked"
Dodanie następujących właściwości do właściwości projektu (plik .csproj):
<GenerateResourceNeverLockTypeAssemblies>true</GenerateResourceNeverLockTypeAssemblies>
Jednak żaden z nich nie działał dla mnie, więc prawdopodobnie możesz zrozumieć, dlaczego zaczynam być trochę sfrustrowany. Nie wiem, gdzie jeszcze szukać, więc mam nadzieję, że ktoś mi coś da! Czy to błąd w VS, a jeśli tak, to czy jest łatka? Czy też zrobiłem coś złego, czy mam okólnik lub podobne, a jeśli tak, to jak mogę się dowiedzieć?
Wszelkie sugestie są mile widziane :)
Aktualizacja: Jak wspomniano w komentarzu poniżej, ja również sprawdzić za pomocą Process Explorer to, że faktycznie jest Visual Studio, który jest blokowanie pliku.