VSCode搭建.NET环境时升级.NET 5.0后执行dotnet命令报空路径错误
Ubuntu 18.04 .NET 5.0升级后dotnet命令空路径报错处理
场景说明
在VSCode搭建.NET开发环境过程中,对Ubuntu 18.04设备上的.NET环境从3.1版本升级到5.0版本后,执行dotnet new console等项目创建命令、甚至大部分常规dotnet命令时触发统一异常,通过dotnet --info可正常输出SDK安装列表,无SDK缺失类异常。
完整报错堆栈
Value cannot be null. (Parameter 'path1') at System.IO.Path.Combine(String path1, String path2, String path3, String path4) at Microsoft.TemplateEngine.Utils.EngineEnvironmentSettings.DefaultPathInfo.get_BaseDir() at Microsoft.TemplateEngine.Edge.Paths.UserPaths.get_AliasesFile() at Microsoft.TemplateEngine.Edge.Settings.AliasRegistry.EnsureLoaded() at Microsoft.TemplateEngine.Edge.Settings.AliasRegistry.TryExpandCommandAliases(IReadOnlyList`1 inputTokens, IReadOnlyList`1& expandedInputTokens) at Microsoft.TemplateEngine.Cli.AliasSupport.TryExpandAliases(INewCommandInput commandInput, AliasRegistry aliasRegistry) at Microsoft.TemplateEngine.Cli.AliasSupport.CoordinateAliasExpansion(INewCommandInput commandInput, AliasRegistry aliasRegistry, ITelemetryLogger telemetryLogger) at Microsoft.TemplateEngine.Cli.New3Command.ExecuteAsync() at Microsoft.TemplateEngine.Cli.CommandParsing.NewCommandInputCli.<>c__DisplayClass19_0.<<OnExecute>b__0>d.MoveNext()
dotnet --info 输出参考
.NET SDK (reflecting any global.json): Version: 5.0.100 Commit: 5044b93829 Runtime Environment: OS Name: ubuntu OS Version: 18.04 OS Platform: Linux RID: ubuntu.18.04-x64 Base Path: /usr/share/dotnet/sdk/5.0.100/ Host (useful for support): Version: 5.0.0 Commit: cf258a14b7 .NET SDKs installed: 3.1.301 [/usr/share/dotnet/sdk] 5.0.100 [/usr/share/dotnet/sdk] .NET runtimes installed: Microsoft.AspNetCore.App 3.1.5 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App] Microsoft.AspNetCore.App 5.0.0 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App] Microsoft.NETCore.App 3.1.5 [/usr/share/dotnet/shared/Microsoft.NETCore.App] Microsoft.NETCore.App 5.0.0 [/usr/share/dotnet/shared/Microsoft.NETCore.App]
问题根因
- 报错堆栈定位显示,异常触发于.NET模板引擎的用户配置路径初始化环节,调用
Path.Combine拼接路径时传入了null参数 - 升级过程中若使用root权限执行SDK安装操作,会将用户主目录下的
~/.dotnet配置目录属主修改为root,普通用户执行dotnet命令时无法正常读取该目录的配置信息,最终导致路径拼接拿到空值抛出异常 - 该初始化逻辑处于dotnet CLI执行流程的前置环节,因此绝大多数需要模板解析、别名匹配的dotnet命令都会触发相同报错
修复步骤
- 核查用户主目录下
.dotnet目录的权限:执行ls -la ~ | grep .dotnet,若目录属主显示为root,执行权限修正命令:sudo chown -R $(whoami):$(whoami) ~/.dotnet - 核验修复结果:重新执行
dotnet new console命令,确认可正常创建控制台项目且无报错触发 - 若修正权限后仍复现相同报错,核查当前终端的
HOME环境变量:执行echo $HOME,确认输出路径与系统对应用户的主目录配置匹配,无异常篡改
内容的提问来源于stack exchange,提问作者ste4lth
相关产品推荐
相关产品推荐

