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 代码中指定任何环境变量来指向这个主位置。
问题:
- 您知道是什么导致创建这些目录和文件吗?它似乎是在应用 运行 一段时间后创建的。
- 我们应该检查哪些方面以确定根本原因?
谢谢!
应用程序是否作为单文件应用程序发布?如果是这样,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.
我们有一系列安装在特定目录中的 .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 代码中指定任何环境变量来指向这个主位置。
问题:
- 您知道是什么导致创建这些目录和文件吗?它似乎是在应用 运行 一段时间后创建的。
- 我们应该检查哪些方面以确定根本原因?
谢谢!
应用程序是否作为单文件应用程序发布?如果是这样,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.