【转】【WPF】资源读取 URI
一开始看到WPF里面经常用如下语句来构造资源文件Uri:
Uri uri = new Uri("/AssemblyName;component/image.png");
我还以为这种格式的字符串是URI标准规定的,但是网上查了一下却没发现有这种格式的URI字符串。
URI是统一资源标识符,通用文法为:
协议名(http,https,ftp,file等)+冒号+协议所对应的内容
URI又分为URL和URN,URL是用来定义一个资源的访问路径.而URN则是用来定义一个资源的名称。(http://zh.wikipedia.org/zh/统一资源标志符)
仔细看了一下MSDN,才发现上面格式的字符串是微软件自己扩展出来的一种URI格式,即Pack URI.这种URI在WPF里用得非常多,主要用来定位
资源文件,以及Xaml文件等。
Pack URI主要是用于描述一个Package中所包含的组成单元。
1. Pack URI的主要文法
pack://authority/path
其中authority指这里所指的Package的类型,而path主要指这里所指的组成单元在Package中路径。
WPF所支持的authority包括:application:/// 和 siteoforigin:/// :
前者主要用来描述在编绎时就已知的资源(比如:资源文件等被Project所引用的文件在编绎时刻均已知),
而后者主要用来描述在编绎时无法确定其状态的外部资源(比如:硬盘上的某个文件,或者网格上的某个文件)。
注意:在实际构建Pack URI的时需要将authority中所包含的"/"换成",". 因此 application:/// 应该为 application:,,,,siteoforigin:///类推。
2. Pack URI的用法
(1)表示当前Assembly中所引用的资源时,采用如下格式构建Pack URI
pack://application:,,,/(资源相对于Assembly所在目录的相对路径)
(2)表示当前Assemby所引用的其它Assembly所引用的资源时,采用如下格式构建Pack URI
pack://application:,,,/AssemblyShortName[;Version][;PublicKey];component/(资源相对于Assembly所在目录的相对路径)
(3)表示siteoforigin类型的资源时,采用如下格式构建Pack URI
pack://siteoforigin:,,,/(资源相对于当前执行的assembly所在位置的路径)
3. Absolute pack URI and relative pack URI
以上所说的都是Absolute pack URI,格式包含schema://authority/path.字符串比较长,写起来不是很方便。
因此还有一种简化版的relative pack URI,构造时只需要使用path即可。
注意:当表示当前Assembly中所引用的资源时,path需表示目标资源相对于当前路径的相对路径。在路径前加"/"表示相对于Assembly的根目录
原文地址:http://www.cnblogs.com/Code-life/archive/2012/10/08/2715930.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义