【问题标题】:.NET Core locking files.NET Core 锁定文件
【发布时间】:2017-06-09 07:25:14
【问题描述】:

我有一个 ASP.NET Core 应用程序。我通过运行命令来运行应用程序

dotnet run

当我构建此 ASP.NET Core 应用程序时,我在五分之一的情况下看到以下错误。

C:...\error CS2012: Cannot open 'C:...\bin\Debug\netcoreapp1.0\AAA.Web.dll' for writing -- '进程无法访问文件'C:. ..\bin\Debug\netcoreapp1.0\AAA.Web.dll' 因为它正被另一个进程使用。'

除了上述问题之外,我还没有看到我在 CSHTML 文件中进行的更新。我必须停止dotnet run 命令,重新构建应用程序,然后运行dotnet run 命令。

如何解决这些问题?

【问题讨论】:

    标签: asp.net-core .net-core


    【解决方案1】:

    这在 IIS 中运行您的 aspnetcore 应用程序时也可能会有所帮助。

    将以下内容添加到您的 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>
    

    【讨论】:

    • 对我来说,安装“.NET Core 2.2 Runtime & Hosting Bundle for Windows (v2.2.7)”解决了问题
    • 更新 - 问题仍然存在,错误结论:-(
    • 是的,我也再次出现了问题。
    • 我们正在向 IIS 测试服务器发布文件。这个答案没有按原样工作,但是创建一个简单的批处理文件将 app_offline.htm 写入部署文件夹似乎已经为我修复了它。可惜它必须手动运行
    • @FredrikStolpe 对我来说,安装“.NET Core 2.2 Runtime & Hosting Bundle for Windows (v2.2.7)”并没有解决问题
    【解决方案2】:

    如果它在本地并且应用程序在 IIS 上运行,那么在您的日期时间之前的 Windows 任务栏中,应该有一个 IIS Express 选项。选择 IIS Express,选择退出。再次尝试运行应用程序。

    【讨论】:

      【解决方案3】:

      在我的情况下,由于 dotnet watch run 命令,即使在停止监视模式后,我也遇到了同样的问题。
      Visual Studio 报告此错误消息: 文件被锁定:“.NET core Host (pid)”
      pid 杀死进程解决了这个问题。

      【讨论】:

      • taskkill /f /pid 12345
      • 感谢@DonCheadle 很好的解决方案。简单而有效!我们可以投票支持评论作为解决方案吗?我至少给了你一票你的评论。
      • mLar 应该在他的回答中包含我的评论
      • 这是对我的修复。该过程与核心主机相比,Visual Studio 报告了 pid。
      • 您还可以在 Windows 资源监视器的 CPU 选项卡上查找进程 ID 并从那里将其杀死。
      【解决方案4】:

      当尝试使用/taskkill /f /pid &lt;number in the error&gt; 终止进程时,它告诉我该进程甚至不存在。

      我只需要在任务管理器中找到.NET Core Host 并在那里结束。

      当我在 Core 3.0 上编辑测试项目时偶尔会发生这种情况 - 不使用 IIS,它只是一个类库和一个解决方案中的测试项目。

      【讨论】:

      • 我遇到了类似的问题。输出提到了锁定测试项目的 pid,我不得不终止该进程。它正在运行“dotnet.exe”(即使在 Visual Studio 和我桌面上的所有内容都关闭之后)。
      • 这对我有用,虽然有时“.NET Core Host”被放置在“Microsoft Visual Studio 2019”主任务下,所以只需展开它并结束“.NET Core Host”跨度>
      【解决方案5】:

      打开任务管理器,找到.NET Core Host,右键,结束任务。

      【讨论】:

        【解决方案6】:

        dotnet watch 命令可以跟踪文件系统的更改和编辑,并将它们编译到正在运行的进程中。这是通过首先在 project.json 文件的 tools 部分中安装 Microsoft.DotNet.Watcher.Tools 包来完成的。请参阅其用法文档here

        安装后,您可以使用命令dotnet watch run 运行应用程序并进行编辑,同时避免手动重新启动应用程序。

        【讨论】:

          【解决方案7】:

          我最终回收了应用程序池以解锁我的 dll。

          【讨论】:

            【解决方案8】:

            这在我身上发生过很多次。至少在我的情况下,问题是我的应用程序正在运行。因此,当编译器尝试更新 dll 时,它无法更新,因为 dll 已被锁定并被正在运行的应用程序使用。一旦我关闭应用程序并再次进行编译,它就可以正常工作了。

            【讨论】:

            • 我认为我们不应该在每次进行更改时关闭应用程序然后重新编译。 dotnet run 以某种方式锁定不应该的 dll。
            • 我不知道。我只知道关闭应用程序会使错误消失。
            • @wonderfulworld 如果不重新编译,您希望如何应用更改?
            • 退出应用程序然后重新编译,然后将应用更改。如果应用程序正在运行,它会锁定 dll。例如,这对于 WinForm 应用程序的工作方式相同。
            • 我并不是说不重新编译就应该显示更改。我的意思是我不应该重新启动应用程序。就像您设置了一个 IIS 应用程序并指向您的应用程序。每次更改代码并重新编译时,您不必重新启动 IIS 网站。
            【解决方案9】:

            我在这里聚会可能有点晚了,但对于未来阅读这个问题的人来说,这似乎是 VS/core 如何与 IIS 交互并停止文件从被锁定:

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

            显然正在调查和调查 .net core vnext。

            【讨论】:

              【解决方案10】:

              100% 为我工作

              它正被另一个进程 .net core 使用

              1. 进入任务管理器(windows)
              2. 右键单击 .NET Core 主机
              3. 单击结束任务 就像看到这张图片一样

              【讨论】:

                【解决方案11】:

                我在 VS2017 和 VS2019 中仍然经常遇到这个问题。希望这对某人有所帮助。

                这对我来说每次都有效。

                如果使用 IISExpress - 使用任务栏中的图标停止应用程序(靠近时钟/时间) 如果使用 IIS - 停止并重新启动站点 要么 在管理员命令提示符下运行 taskkill -F -IM node.exe(杀死当前正在运行的所有节点进程)

                【讨论】:

                  【解决方案12】:

                  AspNetCoreHostingModel 设置为"OutOfProcess" 时会出现此问题 那么你有两个解决问题的方法:

                  1. 将托管模型更改为“InProcess”
                  2. 在 CMD 中使用以下命令
                  taskkill /f /pid {.netcore hosting pid , show you in error line in visual studio}
                  

                  要使用该命令,请不要使用 ""{}

                  【讨论】:

                    【解决方案13】:

                    对我来说,它的工作原理是 -

                    1. 转到您的 bin 和环境,备份文件,尝试删除文件夹 D:\CawProjects\EmailAnalytics\APIV1\APIV1\bin\Development 如果它不允许您删除并在某处显示“打开/使用”,请按照以下流程操作。

                    2. 打开任务管理器——找到.net core主机并右键结束任务

                    【讨论】:

                    • 每次编译?
                    • 不会每次都发生在我身上。
                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2016-12-28
                    • 2021-03-29
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多