Оновлення: Зразок проекту, що відтворює цю помилку, можна знайти тут у Microsoft Connect . Я також перевірив і перевірив, що рішення, наведене у прийнятій відповіді нижче, працює на цьому зразковому проекті. Якщо це рішення не працює для вас, напевно, у вас виникло інше питання (яке належить до окремого питання).
Це питання, яке задавались раніше, і тут, і в Stack Overflow, і в інших місцях, але жодна із пропозицій, які я знайшов поки що, не допомогла мені, тому мені просто потрібно спробувати задати нове запитання.
Сценарій: У мене проста програма Windows Forms (C #, .NET 4.0, Visual Studio 2010). Він має пару базових форм, від яких успадковує більшість інших форм, він використовує Entity Framework (і класи POCO) для доступу до бази даних. Нічого фантазійного, ні багатопотокового чи нічого.
Проблема: На деякий час все було добре. Тоді Visual Studio не вдалося побудувати, коли я збирався запустити програму. Я отримав попередження "Неможливо видалити файл '... bin \ Debug \ [ProjectName] .exe'. Доступ до шляху '... bin \ Debug \ [ProjectName] .exe' заборонено."і помилка "Неможливо скопіювати файл 'obj \ x86 \ Debug \ [ProjectName] .exe" у "bin \ Debug \ [ProjectName] .exe". Процес не може отримати доступ до файлу' bin \ Debug \ [ProjectName] .exe "тому що він використовується в іншому процесі." (Я отримую як попередження, так і помилку під час запуску Перебудувати, але лише помилку під час запуску Build - не думаю, що це актуально?)
Я прекрасно розумію, що говорить повідомлення про попередження та помилку: Visual Studio, очевидно, намагається перезаписати exe-файл, тоді як у той самий час він чомусь блокується. Однак це не допомагає мені знайти вирішення проблеми ... Єдине, що я знайшов працювати - це вимкнути Visual Studio і запустити його заново. Тоді побудова та запуск працює, доки я не зміню деякі форми, тоді в мене знову виникає така ж проблема, і мені доведеться перезапустити ... Досить неприємно!
Як я вже згадував вище, це здається відомою проблемою, тому існує багато запропонованих рішень. Я просто перелічу те, що я вже спробував тут, щоб люди знали, що пропустити:
- Створення нового чистого рішення та просто скопіюйте файли зі старого рішення.
Додавання до наступних заходів до попереднього збирання проекту:
if exist "$(TargetPath).locked" del "$(TargetPath).locked" if not exist "$(TargetPath).locked" if exist "$(TargetPath)" move "$(TargetPath)" "$(TargetPath).locked"
Додавання наступних властивостей проекту (файл .csproj):
<GenerateResourceNeverLockTypeAssemblies>true</GenerateResourceNeverLockTypeAssemblies>
Однак жоден з них не працював на мене, тому ви, мабуть, можете зрозуміти, чому я починаю трохи засмучуватися. Я не знаю, де ще шукати, тому сподіваюся, що хтось мені щось подарує! Це помилка в VS, і якщо так, там є виправлення? Або я зробив щось не так, чи є у мене круговий довідник чи подібне, і якщо так, як я міг це дізнатися?
Будь-які пропозиції високо оцінені :)
Оновлення: Як уже згадувалося в коментарях нижче, я також перевірив з допомогою Process Explorer , що він на справді є Visual Studio , що блокування файлу.