Linux (Redhat) 上的 .NET Core 应用程序在用户主目录中创建神秘的“.net”directories/files

.NET Core apps on Linux (Redhat) creating mysterious ".net" directories/files in user home directories

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

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

等...

应用程序 运行 很好。但是,我们遇到了一个问题,即 .NET 运行time 似乎将一些文件放在当前用户主目录的“.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 二进制文件)被推送到这里,因为它会随着时间的推移消耗大量 space,尤其是当这些奇怪的临时目录被创建时(并且从未自行清理过)。我们没有在我们的 .NET 代码中指定任何环境变量来指向这个主位置。

问题:

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

谢谢!

应用程序是否作为单文件应用程序发布?如果是这样,the documentation 有一些指点。

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

Previously in .NET Core 3.0, when a user runs your single-file app, .NET Core host first extracts all files to a directory before running the application. .NET 5 improves this experience by directly running the code without the need to extract the files from the app.

这解释了位置:

If extraction is used the files are extracted to disk before the app starts:

  • If environment variable DOTNET_BUNDLE_EXTRACT_BASE_DIR is set to a path, the files will be extracted to a directory under that path.
  • Otherwise if running on Linux or MacOS, the files will be extracted to a directory under $HOME/.net.
  • If running on Windows, the files will be extracted to a directory under %TEMP%/.net.