第二次启动ASP.NET核心网站时DLL从bin中删除

DLL is deleted from bin when starting ASP.NET Core website for the second time

我正在开发 ASP.NET Core Web-API 目标 .NET Framework 4.7。

我的解决方案中的一个项目依赖于 System.Threading.Tasks.Dataflow v4.9.0(作为 nuget 包添加)。

这些步骤重现了我的问题:

  1. 清洁溶液
  2. 运行网站(bin文件夹有System.Threading.Tasks.Dataflow.dll)
  3. 停止网站(bin文件夹有System.Threading.Tasks.Dataflow.dll)
  4. 运行 网站(System.Threading.Tasks.Dataflow.dll 已从 bin 文件夹中删除)。

在第 4 步,站点抛出 FileNotFoundException:

Could not load file or assembly 'System.Threading.Tasks.Dataflow, Version=4.6.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.

这当然是因为该文件已从该网站的bin 文件夹中删除。 .dll 仍在引用它的项目的 bin 文件夹中。

Who/what 正在删除文件? 如果我进行清理并构建或 "Rebuild",.dll 将再次复制到 bin 文件夹中,并且第一次复制网站 运行s。

如果我停止并重新启动它,文件又被删除了。

如果我只停止并 "Build" 解决方案,文件不会被删除。只有当我运行的网站。

我试过 运行 没有调试器,但仍然是同样的问题。

编辑:

我用Process Monitor发现是"MSBuild.exe"在删除文件。为什么要这样做?

好的,我明白了:

我的解决方案中还有另一个项目引用了较旧的 "Microsoft.Tpl.Dataflow" v.4.5.24 nuget 包来使用 Dataflow。

一旦我卸载了这个旧的 nuget 包并添加了 "System.Threading.Tasks.Dataflow" v4.9.0,MSBuild 就不再删除我的文件了。

仍然有点奇怪,它只在第二个 运行 删除了文件,但现在可以了!