.NET Core блокировка файлов

У меня есть приложение ASP.NET Core. Я запускаю приложение, выполнив команду

dotnet run

Я вижу следующую ошибку в одной из пяти ситуаций при создании этого приложения ASP.NET Core.

C:...\error CS2012: Невозможно открыть "C:...\bin\Debug\netcoreapp1.0\AAA.Web.dll" для записи - "Процесс не может получить доступ к файлу" C:...\" bin\Debug\netcoreapp1.0\AAA.Web.dll 'потому что он используется другим процессом.'

В дополнение к вышеупомянутой проблеме я также не вижу обновлений, которые я делаю в файле CSHTML. Я должен остановить dotnet run, снова собрать приложение и затем запустить dotnet run.

Как я могу исправить эти проблемы?

enter image description here

Ответ 1

Это также может помочь при запуске приложения aspnetcore в IIS.

Добавьте следующее к вашему csproj:

  <Target Name="PreBuild" BeforeTargets="PreBuildEvent">
    <Exec Command="echo &quot;App Offline&quot; /a &gt; &quot;$(ProjectDir)app_offline.htm&quot;" />
  </Target>

  <Target Name="PostBuild" AfterTargets="PostBuildEvent">
    <Exec Command="del &quot;$(ProjectDir)app_offline.htm&quot;" />
  </Target>

Ответ 2

Если это локально, а приложение работает на IIS, то на панели задач Windows до даты и времени должна быть опция IIS Express. выберите IIS Express, выберите выход. Попробуйте снова запустить приложение.

exit IIS Express

Ответ 3

Команда dotnet watch может отслеживать изменения и изменения файловой системы и компилировать их в текущий процесс. Это делается путем установки пакета Microsoft.DotNet.Watcher.Tools в разделе tools файла project.json. См. Документацию об использовании здесь.

После его установки вы можете запустить приложение с помощью команды dotnet watch run и внести изменения, избегая ручного перезапуска приложения.

Ответ 4

Это случалось со мной много раз. Проблема, по крайней мере, в моем случае заключалась в том, что я запускаю приложение. Поэтому, когда компилятор пытается обновить dll, это невозможно, потому что dll заблокирована и используется запущенным приложением. Как только я закрою приложение и снова сделаю компиляцию, он отлично работает.

Ответ 5

В моем случае такая же проблема возникла из-за команды dotnet watch run даже после остановки режима наблюдения.
Visual studio сообщила об этом сообщении об ошибке: файл заблокирован: ".NET core Host (pid)"
Уничтожение процесса с помощью pid решило проблему.

Ответ 6

В итоге я переработал пул приложений, чтобы разблокировать мои библиотеки. enter image description here

Ответ 7

В этом разница между скомпилированными языками, такими как C, и интерпретируется как python. Конечно, их нужно скомпилировать после изменения. Если вы посмотрите на сборку, представление будет таким же, как в коде, и может быть обновлено "на лету", но dlls необходимо скомпилировать.

Ответ 8

Я могу немного опоздать на вечеринку здесь, но для будущих людей, читающих этот вопрос, может показаться, что это немного "особенность" того, как VS/core может взаимодействовать с IIS и предотвращать блокировку файлов:

https://developercommunity.visualstudio.com/content/problem/546858/bin-files-locked-by-iis-worker-process-1.html

Это, по-видимому, расследуется и рассматривается для .net core vnext.

Ответ 9

Обходной путь лучше перезагрузки компьютера - закрыть VS, открыть диспетчер задач и уничтожить все экземпляры VBCSCompiler.exe

Это сработало для меня