点我——> ASP.NETCORE_配置_Option方式二

博客介绍了ASP.NET CORE配置的Option方式二,为相关开发提供了具体配置方法,有助于开发者在ASP.NET CORE开发中更好地进行配置操作。
ishtar@ubuntu:~/Downloads/archive/最新版本/Linux/Steam++_v3.0.0-rc.16_linux_x64$ sudo bash ./Steam++.sh 创建符号链接 ./dotnet/dotnet 到 ./Steam++ Unhandled exception: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.TypeInitializationException: The type initializer for 'SkiaSharp.SKImageInfo' threw an exception. ---> System.DllNotFoundException: Unable to load shared library 'libSkiaSharp' or one of its dependencies. In order to help diagnose loading problems, consider using a tool like strace. If you're using glibc, consider setting the LD_DEBUG environment variable: /home/ishtar/Downloads/archive/最新版本/Linux/Steam++_v3.0.0-rc.16_linux_x64/assemblies/libSkiaSharp.so: cannot open shared object file: No such file or directory /home/ishtar/Downloads/archive/最新版本/Linux/Steam++_v3.0.0-rc.16_linux_x64/dotnet/shared/Microsoft.NETCore.App/9.0.3/libSkiaSharp.so: cannot open shared object file: No such file or directory /home/ishtar/Downloads/archive/最新版本/Linux/Steam++_v3.0.0-rc.16_linux_x64/assemblies/liblibSkiaSharp.so: cannot open shared object file: No such file or directory /home/ishtar/Downloads/archive/最新版本/Linux/Steam++_v3.0.0-rc.16_linux_x64/dotnet/shared/Microsoft.NETCore.App/9.0.3/liblibSkiaSharp.so: cannot open shared object file: No such file or directory /home/ishtar/Downloads/archive/最新版本/Linux/Steam++_v3.0.0-rc.16_linux_x64/assemblies/libSkiaSharp: cannot open shared object file: No such file or directory /home/ishtar/Downloads/archive/最新版本/Linux/Steam++_v3.0.0-rc.16_linux_x64/dotnet/shared/Microsoft.NETCore.App/9.0.3/libSkiaSharp: cannot open shared object file: No such file or directory /home/ishtar/Downloads/archive/最新版本/Linux/Steam++_v3.0.0-rc.16_linux_x64/assemblies/liblibSkiaSharp: cannot open shared object file: No such file or directory /home/ishtar/Downloads/archive/最新版本/Linux/Steam++_v3.0.0-rc.16_linux_x64/dotnet/shared/Microsoft.NETCore.App/9.0.3/liblibSkiaSharp: cannot open shared object file: No such file or directory at SkiaSharp.SkiaApi.sk_colortype_get_default_8888() at SkiaSharp.SkiaApi.sk_colortype_get_default_8888() at SkiaSharp.SKImageInfo..cctor() --- End of inner exception stack trace --- at Avalonia.Skia.PlatformRenderInterface..ctor(Nullable`1 maxResourceBytes) at Avalonia.Skia.SkiaPlatform.Initialize(SkiaOptions options) at Avalonia.SkiaApplicationExtensions.<>c.<UseSkia>b__0_0() at Avalonia.AppBuilder.SetupUnsafe() at Avalonia.AppBuilder.Setup() at Avalonia.AppBuilder.SetupWithLifetime(IApplicationLifetime lifetime) at BD.WTTS.Program.StartUIApplication() at BD.WTTS.Startup.<ConfigureCommands>b__0_12() at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) --- End of inner exception stack trace --- at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) at System.Delegate.DynamicInvokeImpl(Object[] args) at System.CommandLine.NamingConventionBinder.ModelBindingCommandHandler.InvokeAsync(InvocationContext context) at System.CommandLine.Invocation.InvocationPipeline.<>c__DisplayClass4_0.<<BuildInvocationChain>b__0>d.MoveNext() --- End of stack trace from previous location --- at System.CommandLine.Builder.CommandLineBuilderExtensions.<>c__DisplayClass17_0.<<UseParseErrorReporting>b__0>d.MoveNext() --- End of stack trace from previous location --- at System.CommandLine.Builder.CommandLineBuilderExtensions.<>c__DisplayClass12_0.<<UseHelp>b__0>d.MoveNext() --- End of stack trace from previous location --- at System.CommandLine.Builder.CommandLineBuilderExtensions.<>c__DisplayClass22_0.<<UseVersionOption>b__0>d.MoveNext() --- End of stack trace from previous location --- at System.CommandLine.Builder.CommandLineBuilderExtensions.<>c__DisplayClass19_0.<<UseTypoCorrections>b__0>d.MoveNext() --- End of stack trace from previous location --- at System.CommandLine.Builder.CommandLineBuilderExtensions.<>c.<<UseSuggestDirective>b__18_0>d.MoveNext() --- End of stack trace from previous location --- at System.CommandLine.Builder.CommandLineBuilderExtensions.<>c__DisplayClass16_0.<<UseParseDirective>b__0>d.MoveNext() --- End of stack trace from previous location --- at System.CommandLine.Builder.CommandLineBuilderExtensions.<>c.<<RegisterWithDotnetSuggest>b__5_0>d.MoveNext() --- End of stack trace from previous location --- at System.CommandLine.Builder.CommandLineBuilderExtensions.<>c__DisplayClass8_0.<<UseExceptionHandler>b__0>d.MoveNext() 报错原因
07-09
<think>我们正在处理一个关于Steam++(也称为Watt Toolkit)在Linux上运行时出现的SkiaSharp相关异常问题。用户遇到了`System.Reflection.TargetInvocationException`和`SkiaSharp.SKNativeException`,具体是`DllNotFoundException`,提示无法加载`libSkiaSharp`。 ### 问题分析 1. **异常类型分析**: - `System.Reflection.TargetInvocationException`:这通常表示通过反射调用方法时发生了异常,实际异常在内部异常(InnerException)中。 - 内部异常是`SkiaSharp.SKNativeException`,具体为`DllNotFoundException`,说明系统无法加载SkiaSharp所需的本地库`libSkiaSharp`。 2. **SkiaSharp依赖**: - SkiaSharp是一个跨平台的2D图形库,基于Google的Skia图形引擎。它在Linux上需要本地共享库(如`libSkiaSharp.so`)来运行。 - 在Linux上,SkiaSharp的NuGet包会包含一个`runtimes`目录,其中包含不同平台(如`linux-x64`)的本地库。应用程序在运行时需要能够找到并加载这个库。 3. **可能的原因**: - **缺少依赖库**:SkiaSharp依赖于一些系统库,例如`libfontconfig`、`libfreetype`等。如果这些库没有安装在系统中,可能会导致加载失败。 - **本地库文件未正确部署**:应用程序可能没有正确包含或放置`libSkiaSharp.so`文件,或者文件权限不正确。 - **运行时标识符(RID)不匹配**:如果应用程序发布时指定了特定的运行时标识符(如`linux-x64`),但当前系统环境不匹配,可能导致找不到对应的本地库。 - **路径问题**:应用程序可能没有将包含本地库的目录(如`runtimes/linux-x64/native`)添加到动态库加载路径中。 ### 解决方案 #### 步骤1: 安装系统依赖 首先,确保系统安装了SkiaSharp所需的依赖库。在基于Debian/Ubuntu的系统上,可以运行以下命令: ```bash sudo apt update sudo apt install libfontconfig1 libfreetype6 ``` 对于其他Linux发行版,请使用相应的包管理器安装类似的包(例如,Fedora/CentOS使用`dnf`或`yum`)。 #### 步骤2: 检查本地库文件 确认应用程序目录中包含了`libSkiaSharp.so`文件,并且位于正确的子目录下。通常,它应该在`runtimes/linux-x64/native/`目录中。如果目录结构不正确,请尝试重新部署应用程序,确保发布时包含了正确的运行时文件。 #### 步骤3: 设置动态库加载路径 如果本地库文件存在但应用程序无法找到,可以尝试设置环境变量`LD_LIBRARY_PATH`来指定包含`libSkiaSharp.so`的目录。例如,如果应用程序位于`/path/to/app`,并且`libSkiaSharp.so`在`/path/to/app/runtimes/linux-x64/native`中,那么可以这样运行: ```bash export LD_LIBRARY_PATH="/path/to/app/runtimes/linux-x64/native:$LD_LIBRARY_PATH" ./Steam++ # 替换为实际的启动命令 ``` 或者,将这一行添加到启动脚本中。 #### 步骤4: 检查文件权限 确保`libSkiaSharp.so`文件具有可执行权限。如果没有,请运行: ```bash chmod +x /path/to/app/runtimes/linux-x64/native/libSkiaSharp.so ``` #### 步骤5: 使用`ldd`检查依赖 使用`ldd`命令检查`libSkiaSharp.so`的依赖是否满足: ```bash ldd /path/to/app/runtimes/linux-x64/native/libSkiaSharp.so ``` 如果输出中有"not found"的项,则需要安装相应的系统库。 #### 步骤6: 更新SkiaSharp版本 如果问题仍然存在,考虑更新Steam++到最新版本,或者检查是否有更新的SkiaSharp版本可用。可能当前版本的SkiaSharp存在已知问题。 #### 步骤7: 查看应用程序日志 如果应用程序提供了更详细的日志,查看日志以获取更多线索。 ### 总结 出现`DllNotFoundException`通常是因为缺少SkiaSharp的本地库或它的依赖。通过安装系统依赖、确保本地库正确部署并设置正确的加载路径,可以解决此问题。 [^1]: SkiaSharp官方文档:https://docs.microsoft.com/zh-cn/xamarin/xamarin-forms/user-interface/graphics/skiasharp/ §§相关问题§§ 1. 如何解决Linux上其他.NET应用程序的`DllNotFoundException`错误? 2. 在Linux上发布.NET应用程序时,如何确保所有依赖项(包括本地库)都正确打包? 3. SkiaSharp在跨平台开发中还有哪些常见问题及解决方案?</think>### Steam++ Linux 版本运行时出现 SkiaSharp DllNotFoundException 的原因分析 该异常的根本原因是 **SkiaSharp 的本地依赖库未正确加载**。以下是具体原因和解决方案: --- #### 主要原因 1. **缺少 SkiaSharp 的本地运行时库** SkiaSharp 需要 `libSkiaSharp.so` 本地库文件支持。Linux 版本若未正确包含或定位此文件,会抛出 `DllNotFoundException`。常见于: - 应用未携带 `runtimes/linux-x64/native/libSkiaSharp.so` 文件 - 文件权限不足(需 `chmod +x` 赋予可执行权限) 2. **依赖的系统库缺失** `libSkiaSharp.so` 依赖以下系统库: ```bash libfontconfig.so.1 libfreetype.so.6 libharfbuzz.so.0 ``` 若未安装,会导致级联加载失败。 3. **运行时标识符(RID)不匹配** .NET 应用需明确指定 Linux RID(如 `linux-x64`)。若发布时未包含对应 RID 的 SkiaSharp 本地库,会触发异常。 4. **路径配置错误** 动态链接器未正确识别库路径,需通过 `LD_LIBRARY_PATH` 显式指定路径: ```bash export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/path/to/app/runtimes/linux-x64/native" ``` --- #### 解决方案 ##### 步骤1:安装系统依赖 ```bash # Debian/Ubuntu sudo apt install libfontconfig1 libfreetype6 libharfbuzz0b # Fedora/CentOS sudo dnf install fontconfig freetype harfbuzz ``` ##### 步骤2:验证本地库文件 检查应用目录是否包含: ``` /path/to/Steam++/ ├── runtimes/ │ └── linux-x64/ │ └── native/ │ └── libSkiaSharp.so ← 确保此文件存在且可执行 ``` 若无此文件,需重新下载完整版应用或从 [SkiaSharp Releases](https://github.com/mono/SkiaSharp/releases) 补全。 ##### 步骤3:设置环境变量 启动前执行: ```bash # 定位到应用目录后执行 export LD_LIBRARY_PATH="$PWD/runtimes/linux-x64/native:$LD_LIBRARY_PATH" chmod +x runtimes/linux-x64/native/libSkiaSharp.so # 确保可执行权限 ./Steam++ # 启动应用 ``` ##### 步骤4:检查 .NET 运行时配置 若使用自包含发布,确保命令包含 RID: ```bash dotnet publish -c Release -r linux-x64 --self-contained true ``` --- ### 根本原因总结 | 问题类型 | 触发场景 | 解决方向 | |-------------------|--------------------------------------------------------------------------|------------------------------| | 本地库缺失 | 应用未包含 `libSkiaSharp.so` 或文件损坏 | 补全文件 + `chmod +x` | | 系统依赖未安装 | `ldd runtimes/linux-x64/native/libSkiaSharp.so` 显示 "not found" | 安装 `libfontconfig` 等 | | 路径配置错误 | 动态链接器未搜索到库路径 | 设置 `LD_LIBRARY_PATH` | | RID 不匹配 | 发布时未指定 `linux-x64` 或使用错误运行时 | 显式声明 RID 发布 | > 提示:可通过 `ldd runtimes/linux-x64/native/libSkiaSharp.so` 验证依赖完整性[^1]。 [^1]: SkiaSharp 官方部署文档: https://docs.microsoft.com/zh-cn/dotnet/api/skiasharp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值