将图片资源打包进NuGet库后无法通过Pack URI访问的问题
问题分析与解决方案
你遇到的核心问题是:本地项目引用时能正常访问嵌入资源的Pack URI,在通过NuGet包引用时失效,根源在于NuGet打包时的资源配置和URI路径匹配问题。
1. 修正项目文件的嵌入资源配置
你当前的配置错误地使用了Pack和PackagePath属性——这两个属性是用来把资源作为NuGet包中的独立文件分发,而非嵌入到程序集里。正确的嵌入资源配置应该确保资源被打包进程序集,并且逻辑路径一致:
<ItemGroup> <EmbeddedResource Include="Resources\dexie_black_medium.png"> <LogicalName>Resources.dexie_black_medium.png</LogicalName> </EmbeddedResource> <EmbeddedResource Include="Resources\dexie_medium.png"> <LogicalName>Resources.dexie_medium.png</LogicalName> </EmbeddedResource> <EmbeddedResource Include="Resources\dexie_white_medium.png"> <LogicalName>Resources.dexie_white_medium.png</LogicalName> </EmbeddedResource> <EmbeddedResource Include="Resources\duck_black_medium.png"> <LogicalName>Resources.duck_black_medium.png</LogicalName> </EmbeddedResource> <EmbeddedResource Include="Resources\duck_medium.png"> <LogicalName>Resources.duck_medium.png</LogicalName> </EmbeddedResource> <EmbeddedResource Include="Resources\duck_white_medium.png"> <LogicalName>Resources.duck_white_medium.png</LogicalName> </EmbeddedResource> </ItemGroup>
LogicalName指定了资源在程序集中的嵌入路径,确保和本地引用时的层级一致。- 移除
Pack和PackagePath,避免资源被当作独立文件分发。
2. 确认Pack URI的正确性
NuGet引用时,Pack URI必须严格匹配程序集名称和资源嵌入路径:
<Image Source="pack://application:,,,/Dexie.Space.Net;component/Resources/dexie_medium.png"></Image>
- 确保
Dexie.Space.Net是NuGet包中程序集的准确名称(和项目的AssemblyName完全一致)。 - 如果程序集默认命名空间与AssemblyName不同,需要调整
LogicalName为{默认命名空间}.Resources.dexie_medium.png,对应的URI也要改为:<Image Source="pack://application:,,,/Dexie.Space.Net;component/{默认命名空间}/Resources/dexie_medium.png"></Image>
3. 验证资源嵌入状态
可以通过以下步骤确认资源是否正确嵌入:
- 将NuGet包后缀改为
.zip并解压,找到lib目录下的目标程序集。 - 用ILSpy等工具打开程序集,查看
Resources节点下是否存在对应图片文件。
4. 备选方案:内容文件分发
如果不需要嵌入资源,而是希望资源作为独立文件随NuGet包分发,可修改配置为:
<ItemGroup> <Content Include="Resources\dexie_black_medium.png"> <Pack>True</Pack> <PackagePath>contentFiles\any\any\Resources\</PackagePath> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> <!-- 其他资源按此格式配置 --> </ItemGroup>
此时访问路径改为相对路径即可:
<Image Source="Resources/dexie_medium.png"></Image>
内容的提问来源于stack exchange,提问作者julian bechtold
相关产品推荐
相关产品推荐

