错误进程无法访问该文件,因为在.NET Core上通过CLI生成项目时,另一个进程正在使用该文件

aij0ehis  于 2023-06-07  发布在  .NET
关注(0)|答案(9)|浏览(517)

在我的.NET Core项目上运行dotnet build命令时出现以下错误。

C:\Program Files\dotnet\sdk\2.1.2\Microsoft.Common.CurrentVersion.targets(4106,5
 ): warning MSB3026: Could not copy "obj\Debug\netcoreapp2.0\Blog-Yantra.dll" to
 "bin\Debug\netcoreapp2.0\Blog-Yantra.dll". Beginning retry 1 in 1000ms. The proc
 ess cannot access the file 'E:\learn\blog\Blog-Yantra\bin\Debug\netcoreapp2.0\Bl
 og-Yantra.dll' because it is being used by another process.  [E:\learn\blog\Blog
 -Yantra\Blog-Yantra.csproj]

我的csproj文件看起来像:

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
    <TypeScriptToolsVersion>2.3</TypeScriptToolsVersion>
  </PropertyGroup>

  <ItemGroup>
    <Folder Include="wwwroot\" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.3" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.0.1" />
    <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="2.0.1" />
  </ItemGroup>
  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="2.0.0" />
  </ItemGroup>
</Project>
gwo2fgha

gwo2fgha1#

所以,我在这里提出了解决方案。
有进程正在运行,并且正在锁定程序集,因为我通过dotnet cli执行了dotnet run来运行项目,并且我执行了Ctrl + c来终止正在运行的进程。但是Ctrl + c并没有杀死所有进程,查尔兹继续运行并锁定程序集。kestrel服务器仍在同一端口上运行。
要终止正在运行的kestrel服务器,我运行了以下命令。

C:\Users\Kiran>netstat -ano -p TCP | find /I "listening" | find /I "2492"
TCP    127.0.0.1:2492         0.0.0.0:0              LISTENING       820

C:\Users\Kiran>taskkill /F /PID 820
SUCCESS: The process with PID 820 has been terminated.

需要运行的命令

netstat -ano -p TCP | find /I "listening" | find /I "{your port number}"
taskkill /F /PID {your process ID}

How to manually stop kestrel server
此问题的一些参考文献包括:
如何手动停止kestrel服务器。关于SO的提问
Port localhost:5000 not released causing error System.IO.IOException: Failed to bind to address http://127.0.0.1:5000: address already in use. issue posted on github
terminating dotnet run doesn't terminate child. Issue on github
Windows: How to kill process by port. Blog post

prdp8dxp

prdp8dxp2#

最有可能的是一个开放的.Net核心进程运行和阻塞,如果在windows上,只需通过任务管理器杀死它。

mrfwxfqh

mrfwxfqh3#

您的ASP.NET应用程序正在同一目录中运行,这就是您无法生成代码的原因。您有以下选项:
1.终止正在运行的ASP.NET应用程序;
1.将你的代码复制到另一个目录并从那里构建它;或
1.重新启动计算机并尝试重新生成。
我会选择第一个选项,但如果你很难找到如何做到这一点,最后一个选项是最简单的。在任何情况下,如果出于任何原因,你不能重新启动计算机,第二个肯定会工作。

k4aesqcs

k4aesqcs4#

如果您的Web服务器是IIS,您可以在项目根目录中放置一个名为app_offline.htm的空文件,这将正常关闭应用程序。
我把它写成这样:
1.将app_offline. htm添加到IIS承载的项目根目录

  1. dotnet build
    1.删除app_offline.htm
anhgbhbe

anhgbhbe5#

我在添加新迁移类时也遇到过同样的问题。我的Visual Studio(2017)示例经常冻结,当我重新启动Visual Studio时,我开始收到类似的消息。帮助我的是通过Windows任务管理器杀死dotnet.exe进程。

xeufq47z

xeufq47z6#

对我来说,解决方案是通过右键单击任务栏图标来停止IIS Express进程。
或者你可以在“预生成事件”中创建一个命令行:
$(解决方案)taskkill /FI“IMAGENAME eq iisexpress.exe”/F
在项目的“属性”>“构建事件”x1c 0d1x中添加此命令
我们没有时间查看命令是否在“输出”视图中正确执行到“构建”部分。在“预生成事件”中添加此命令行以查看结果:
cmd /c暂停
您可以在检查后删除此行...

0dxa2lsx

0dxa2lsx7#

VisualStudio Code中的一个简单解决方案就是杀死终端。

然后,通过在“终端”选项卡中启动新终端(终端-新终端)或使用快捷键Ctrl + Shift + `重新启动PowerShell或CMD终端

cotxawn7

cotxawn78#

对于那些像我一样在共享主机上有这个问题,无法访问任何东西的人,不要试图直接通过面板或FTP复制您的dll,压缩它,然后上传它,然后以这种方式在Plesk面板中提取它。

zpf6vheq

zpf6vheq9#

我的错误与netcore 3和visual studio读取的文件有关:

System.IO.IOException: The process cannot access the file 'C:\logs\api.log' because it is being used by another process.
   at System.IO.FileStream.ValidateFileHandle(SafeFileHandle fileHandle)

2小时后,只有LockHunter工作!!

我下载了它,安装,右键单击有问题的文件:

搜索我的档案几秒钟后,进程被找到:

最后,我点击“unclock it”,c#就可以读取这个文件了。

PD:为什么Windows会这样做?这就是为什么现代开发不使用也不会使用Windows的原因:D

相关问题