Linux 上的 .NET Core 应用程序 (Redhat) 在用户主目录中创建神秘的".net"目录/文件



我们有一系列.NET Core控制台应用程序安装在特定目录中:

/users/apps/app1/MyApp1
/users/apps/app2/MyApp2

等等。。。

应用程序运行良好。然而,我们有一个问题,.NET运行时似乎将一些文件放在"中;。net";当前用户主目录中的文件夹。

unclejoe@myhost::/home/unclejoe> ls -la
total 40
drwx------.  8 unclejoe mygroup    139 Jan 24 14:42 .
drwxr-xr-x. 90 root    root  4096 Jan 21 15:29 ..
-rw-------.  1 unclejoe mygroup  15510 Jan 24 14:42 .bash_history
drwx------.  10 unclejoe mygroup      190 Jan 24 01:42 .net

在.net文件夹中,我们看到一堆看似临时的文件夹:

[unclejoe@myhost .net]$ ls -la
total 4
drwx------. 10 unclejoe mygroup  190 Jan 24 01:42 .
drwx------. 14 unclejoe mygroup 4096 Jan 23 16:28 ..
drwx------.  4 unclejoe mygroup 46 Jan 24 12:09 MyApp1
drwx------.  5 unclejoe mygroup 66 Jan 24 01:42 MyApp2

进一步钻探:

[unclejoe@myhost MyApp1]$ ls -la
total 24
drwx------.  4 unclejoe mygroup   46 Jan 24 12:09 .
drwx------. 10 unclejoe mygroup  190 Jan 24 01:42 ..
drwx------.  2 unclejoe mygroup 8192 Jan 24 01:42 cz1zui3n.uma
drwx------.  2 unclejoe mygroup 8192 Jan 24 12:09 pvwttlkm.z4s

钻孔最远:

[unclejoe@myhost MyApp1]$ cd cz1zui3n.uma
[unclejoe@myhost cz1zui3n.uma]$ ls -l
total 30808
-rw-r--r--. 1 unclejoe mygroup   330240 Jan 24 01:42 Autofac.dll
-rw-r--r--. 1 unclejoe mygroup    16384 Jan 24 01:42 Autofac.Extensions.DependencyInjection.dll
-rw-r--r--. 1 unclejoe mygroup   143609 Jan 24 01:42 MyApp1.deps.json
-rw-r--r--. 1 unclejoe mygroup    10752 Jan 24 01:42 MyApp1.dll
-rw-r--r--. 1 unclejoe mygroup      149 Jan 24 01:42 MyApp1.runtimeconfig.json
-rw-r--r--. 1 unclejoe mygroup    27136 Jan 24 01:42 Common.dll

问题是,我们不希望这些工件(dlls/app二进制文件(被推到这里,因为随着时间的推移,它会占用大量空间,尤其是当这些奇怪的临时目录被创建时(而且从未单独清理过(。我们在.NET代码中没有指定任何环境变量来指向此主位置。

问题:

  1. 您知道创建这些目录和文件的原因吗?它似乎是在应用程序运行一段时间后创建的
  2. 我们应该检查哪些领域以确定根本原因

谢谢!

应用程序是否发布为单文件应用程序?如果是这样的话,文档中有一些指针。

看看它提取第三方库的事实,我猜这可能是相关的:

以前在.NET Core 3.0中,当用户运行单文件应用程序时,.NET Core主机会在运行应用程序之前先将所有文件提取到一个目录中。NET 5通过直接运行代码而无需从应用程序中提取文件来改善这种体验。

这解释了位置:

如果使用提取,文件将在应用程序之前提取到磁盘启动:

  • 如果环境变量DOTNET_BUNDLE_EXTRACT_BASE_DIR设置为路径,文件将被提取到该路径下的一个目录中
  • 否则,如果在Linux或MacOS上运行,文件将被提取到$HOME/.net下的目录
  • 如果在Windows上运行,文件将提取到%TEMP%/.net下的目录

最新更新