我们有一系列.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代码中没有指定任何环境变量来指向此主位置。
问题:
- 您知道创建这些目录和文件的原因吗?它似乎是在应用程序运行一段时间后创建的
- 我们应该检查哪些领域以确定根本原因
谢谢!
应用程序是否发布为单文件应用程序?如果是这样的话,文档中有一些指针。
看看它提取第三方库的事实,我猜这可能是相关的:
以前在.NET Core 3.0中,当用户运行单文件应用程序时,.NET Core主机会在运行应用程序之前先将所有文件提取到一个目录中。NET 5通过直接运行代码而无需从应用程序中提取文件来改善这种体验。
这解释了位置:
如果使用提取,文件将在应用程序之前提取到磁盘启动:
- 如果环境变量DOTNET_BUNDLE_EXTRACT_BASE_DIR设置为路径,文件将被提取到该路径下的一个目录中
- 否则,如果在Linux或MacOS上运行,文件将被提取到$HOME/.net下的目录
- 如果在Windows上运行,文件将提取到%TEMP%/.net下的目录