Linux下安装.NET MAUI时执行dotnet workload install android报错求助
问题描述
通过sudo snap install dotnet-sdk --classic安装.NET SDK 7后,执行dotnet workload install android时出现只读文件系统错误,错误日志如下:
dotnet workload install android Unhandled exception: System.IO.IOException: Read-only file system : '/snap/dotnet-sdk/216/metadata' at System.IO.FileSystem.CreateDirectory(String fullPath, UnixFileMode unixCreateMode) at System.IO.Directory.CreateDirectory(String path) at Microsoft.DotNet.Workloads.Workload.Install.WorkloadInstallerFactory.CanWriteToDotnetRoot(String dotnetDir) at Microsoft.DotNet.Workloads.Workload.Install.WorkloadInstallerFactory.GetWorkloadInstaller(IReporter reporter, SdkFeatureBand sdkFeatureBand, IWorkloadResolver workloadResolver, VerbosityOptions verbosity, String userProfileDir, Boolean verifySignatures, INuGetPackageDownloader nugetPackageDownloader, String dotnetDir, String tempDirPath, PackageSourceLocation packageSourceLocation, RestoreActionConfig restoreActionConfig, Boolean elevationRequired) at Microsoft.DotNet.Workloads.Workload.Install.WorkloadInstallCommand..ctor(ParseResult parseResult, IReporter reporter, IWorkloadResolver workloadResolver, IInstaller workloadInstaller, INuGetPackageDownloader nugetPackageDownloader, IWorkloadManifestUpdater workloadManifestUpdater, String dotnetDir, String userProfileDir, String tempDirPath, String version, IReadOnlyCollection`1 workloadIds, String installedFeatureBand) at Microsoft.DotNet.Cli.WorkloadInstallCommandParser.<>c.<ConstructCommand>b__6_0(ParseResult parseResult) at System.CommandLine.Invocation.InvocationPipeline.<>c__DisplayClass4_0.<<BuildInvocationChain>b__0>d.MoveNext() --- End of stack trace from previous location --- at Microsoft.DotNet.Cli.Parser.<>c__DisplayClass17_0.<<UseParseErrorReporting>b__0>d.MoveNext() --- End of stack trace from previous location --- at System.CommandLine.CommandLineBuilderExtensions.<>c__DisplayClass11_0.<<UseHelp>b__0>d.MoveNext() --- End of stack trace from previous location --- at System.CommandLine.CommandLineBuilderExtensions.<>c.<<UseSuggestDirective>b__17_0>d.MoveNext() --- End of stack trace from previous location --- at System.CommandLine.CommandLineBuilderExtensions.<>c__DisplayClass15_0.<<UseParseDirective>b__0>d.MoveNext() --- End of stack trace from previous location --- at System.CommandLine.CommandLineBuilderExtensions.<>c__DisplayClass7_0.<<UseExceptionHandler>b__0>d.MoveNext()
解决方法
用户级安装工作负载:
执行以下命令,将Android工作负载安装到用户目录,规避Snap包的只读限制:dotnet workload install android --user替换为官方脚本安装.NET SDK:
如果用户级安装无效,可卸载Snap版本,改用官方脚本安装:- 卸载Snap版本的.NET SDK:
sudo snap remove dotnet-sdk - 运行官方安装脚本(以7.0.408版本为例,可替换为最新的7.x版本号):
curl -sSL https://dot.net/v1/dotnet-install.sh | bash /dev/stdin --version 7.0.408 - 配置环境变量:
打开~/.bashrc或~/.zshrc文件,添加以下内容:
保存后执行export PATH="$HOME/.dotnet:$PATH"source ~/.bashrc或source ~/.zshrc使配置生效。
- 卸载Snap版本的.NET SDK:
Rider中配置SDK路径:
打开Rider的设置(File > Settings > Build, Execution, Deployment > Toolset and Build),将SDK路径指向用户目录下的.dotnet文件夹(若使用脚本安装)。
内容的提问来源于stack exchange,提问作者Kelvin Kirwa
相关产品推荐
相关产品推荐

