.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 "App Offline" /a > "$(ProjectDir)app_offline.htm"" />
</Target>
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
<Exec Command="del "$(ProjectDir)app_offline.htm"" />
</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
Это сработало для меня