与程序集的文件位置相关的多个 API 在以单文件发布格式调用时,其行为发生变化。
更改描述
在 .NET 5 及更高版本的单文件发布中,捆绑程序集从内存加载,而不是提取到磁盘。 对于单文件发布的应用,这意味着某些与位置相关的 API 在 .NET 5 和更高版本上返回的值与以前版本的 .NET 不同。 更改如下所示:
| API(应用程序编程接口) | 以前的版本 | .NET 5 及更高版本 |
|---|---|---|
| Assembly.Location | 返回提取的 DLL 文件路径 | 返回捆绑程序集的空字符串 |
| Assembly.CodeBase | 返回提取的 DLL 文件路径 | 引发捆绑的程序集的异常 |
| Assembly.GetFile(String) | 为捆绑的程序集返回 null |
引发捆绑的程序集的异常 |
Environment.GetCommandLineArgs()[0] |
值是入口点 DLL 的名称 | 值是主机可执行文件的名称 |
| AppContext.BaseDirectory | 值是临时提取目录 | 值是主机可执行文件的包含目录 |
已引入的版本
5.0
建议的措施
在发布为单个文件时,避免依赖程序集的文件位置。