You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否将Avalonia资源文件夹置于项目外的公共共享位置?

多个Avalonia应用共享独立Assets文件夹的实现方案

方案1:创建共享类库项目(推荐)

这是最规范的跨项目资源共享方式:

  • 新建一个.NET类库项目,确保引用Avalonia相关NuGet包
  • 将独立的Assets文件夹移入类库项目,修改类库的.csproj文件添加资源配置:
<ItemGroup>
  <AvaloniaResource Include="Assets\**" />
</ItemGroup>
  • 在所有需要使用共享Assets的应用项目中,添加对该类库的引用
  • 运行时访问资源时,使用类库的程序集名称构造URI:
AssetLoader.Open(new Uri($"avares://SharedAssetsLib/Assets/Icons/{imageFileName}"))

(将SharedAssetsLib替换为你的类库实际程序集名称)

方案2:将外部Assets作为链接项引入项目

无需额外类库,直接把外部Assets以链接形式添加到每个应用项目:

  • 打开应用的.csproj文件,修改资源配置,用Include指向外部Assets的路径,LinkBase指定项目内的虚拟路径:
<ItemGroup>
  <AvaloniaResource Include="..\SharedAssetsRoot\**">
    <LinkBase>Assets</LinkBase>
  </AvaloniaResource>
</ItemGroup>

(..\SharedAssetsRoot替换为外部Assets文件夹的实际相对/绝对路径)

  • 编译后,外部Assets会被当作项目自身资源处理,访问方式和之前一致:
AssetLoader.Open(new Uri($"avares://{assemblyName}/Assets/Icons/{imageFileName}"))

方案3:直接访问文件系统路径(非嵌入资源场景)

如果不需要将Assets嵌入程序集,可直接读取物理文件:

  • 确保所有应用都能访问共享Assets的物理路径(如公共应用数据目录、网络共享文件夹)
  • 使用文件系统API直接读取,无需AssetLoader:
var sharedAssetsPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "SharedAssets", "Icons");
var imagePath = Path.Combine(sharedAssetsPath, imageFileName);
using var stream = File.OpenRead(imagePath);
// 用stream加载图片资源

注意:需处理跨平台路径兼容性和文件访问权限问题。

内容的提问来源于stack exchange,提问作者Dave Doknjas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 16:27:08