通过 FTP 发布 .NET Core 3.1 应用程序时出现错误代码 550

问题描述 投票:0回答:2

我有一个正在在线发布的 .NET Core 3.1 应用程序 (api),并且我在 Visual Studio 中使用发布方法 FTP。 它工作得很好,但是当我在编码后尝试再次发布时,我总是收到这些错误:

  • 发布文件夹/...
  • 无法将“AutoMapper.dll”添加到网站。该进程无法访问该文件,因为该文件正在被另一个进程使用 (550)。
  • 无法将“projectname.API.dll”添加到网站。该进程无法访问该文件,因为该文件正在被另一个进程使用 (550)。
  • 无法将“projectname.Domain.dll”添加到网站。该进程无法访问该文件,因为该文件正在被另一个进程使用 (550)。
  • ...

这种情况在我的项目中的所有 dll 上持续了相当长的一段时间。我工作后发布的唯一方法是完全重置我的电脑删除项目中必须发布的所有 bin 和 obj 文件夹,打开 VS 并发布,然后再执行其他操作。

我怀疑这与 VS 在我尝试发布时仍在某处/以某种方式使用 dll 有关。

我尝试在任务管理器中查找进程,但没有看到任何可能导致此问题的异常/问题。

任何与此相关的帮助将不胜感激,因为我喜欢为我编写的每条路由更新我的API以在部署的版本上进行测试,但这样很麻烦......

谢谢!

asp.net .net asp.net-core ftp publishing
2个回答
0
投票

我认为这不是您的电脑。错误 550 是 FTP 错误。我认为这里发生的是,当您通过 FTP 发布您的网站并在浏览器中打开您的网站时,您实际上所做的是在服务器上运行您的应用程序。

当您的应用程序运行时,您无法修改正在使用的 DLL。

那么为什么重新启动电脑就能解决问题呢?这是因为这些托管提供商的配置是,如果一段时间内没有人请求某个网站,则终止该应用程序。这是因为节省内存和CPU。

因此,当您重新启动电脑并删除 bin 和 obj 文件夹并重建项目时,这需要时间,因为在此期间没有向您的网站发送请求,您的应用程序将被终止,现在您可以再次使用 FTP 更新您的网站。

要测试此场景,只需关闭浏览器,并在半小时内不要打开您的网站,然后尝试通过 FTP 更新您的网站。 或者,您可以重新启动 PC 并删除 bin 和 obj 文件夹,但在使用 FTP 推送文件之前,请在浏览器中打开您的站点。这必须运行您的应用程序并再次导致 550 错误。


0
投票

我在 Azure 应用服务 (Linux) 中托管我的 Web 应用程序。即使应用程序服务停止,我也遇到了这个问题。 我能够使用 Kudu 的 SSH 列出我的服务器进程来解决这个问题:

ps aux

USER         PID  ... COMMAND
root          75  ... dotnet Project.dll

或使用 Kudu Process Explorer:https://{appname}.scm.azurewebsites.net/ProcessExplorer

然后杀死所有正在使用锁定文件的进程:

kill 75

之后,我就可以毫无问题地发布到 FTP!

© www.soinside.com 2019 - 2024. All rights reserved.