WPF程序集资源URI配置问题:PixelShader路径错误排查
WPF PixelShader URI配置问题分析
让我帮你拆解下这段代码里的URI问题:
你的URI配置存在两个核心问题,导致资源可能无法正确加载:
URI格式与指定的
UriKind.Relative不兼容:你写的/Shazzam.Shaders;component/Effects/PivotEffect.ps是WPF中绝对组件资源URI的格式(包含程序集标识;component),但你却设置了UriKind.Relative。相对URI的规则是不允许包含程序集名称和;component标记的,这会让WPF的资源解析器搞混路径逻辑。相对路径冗余了程序集前缀:当使用相对URI时,路径应该直接从当前程序集的资源根目录开始。你的
PivotEffect.ps放在Effects文件夹下,且已设置Build Action为Resource,所以相对路径只需要写Effects/PivotEffect.ps就足够了,不需要额外加程序集相关的前缀。
修复后的两种可选代码
选项1:使用相对URI(更简洁,推荐)
Dim pixelShader As PixelShader = New PixelShader() pixelShader.UriSource = New Uri("Effects/PivotEffect.ps", UriKind.Relative)
选项2:使用绝对组件URI(适合跨程序集引用场景)
如果你需要明确指定程序集(比如从其他项目引用资源),就要用完整的绝对URI格式,并把UriKind设为Absolute:
Dim pixelShader As PixelShader = New PixelShader() pixelShader.UriSource = New Uri("pack://application:,,,/Shazzam.Shaders;component/Effects/PivotEffect.ps", UriKind.Absolute)
最后提醒下:要确认你的项目编译后的程序集名称确实是Shazzam.Shaders(可以在项目属性的「应用程序」标签里查看),如果程序集名称和命名空间不一样,记得把URI里的Shazzam.Shaders替换成实际的程序集名称哦。
内容的提问来源于stack exchange,提问作者Saif Hef
相关产品推荐
相关产品推荐

